Merge branch 'js/upload-pack'
[git] / peek-remote.c
1 #include "cache.h"
2 #include "refs.h"
3 #include "pkt-line.h"
4
5 static const char peek_remote_usage[] =
6 "git-peek-remote [--upload-pack=<git-upload-pack>] [<host>:]<directory>";
7 static const char *uploadpack = "git-upload-pack";
8
9 static int peek_remote(int fd[2], unsigned flags)
10 {
11         struct ref *ref;
12
13         get_remote_heads(fd[0], &ref, 0, NULL, flags);
14         packet_flush(fd[1]);
15
16         while (ref) {
17                 printf("%s      %s\n", sha1_to_hex(ref->old_sha1), ref->name);
18                 ref = ref->next;
19         }
20         return 0;
21 }
22
23 int main(int argc, char **argv)
24 {
25         int i, ret;
26         char *dest = NULL;
27         int fd[2];
28         struct child_process *conn;
29         int nongit = 0;
30         unsigned flags = 0;
31
32         setup_git_directory_gently(&nongit);
33
34         for (i = 1; i < argc; i++) {
35                 char *arg = argv[i];
36
37                 if (*arg == '-') {
38                         if (!prefixcmp(arg, "--upload-pack=")) {
39                                 uploadpack = arg + 14;
40                                 continue;
41                         }
42                         if (!prefixcmp(arg, "--exec=")) {
43                                 uploadpack = arg + 7;
44                                 continue;
45                         }
46                         if (!strcmp("--tags", arg)) {
47                                 flags |= REF_TAGS;
48                                 continue;
49                         }
50                         if (!strcmp("--heads", arg)) {
51                                 flags |= REF_HEADS;
52                                 continue;
53                         }
54                         if (!strcmp("--refs", arg)) {
55                                 flags |= REF_NORMAL;
56                                 continue;
57                         }
58                         usage(peek_remote_usage);
59                 }
60                 dest = arg;
61                 break;
62         }
63
64         if (!dest || i != argc - 1)
65                 usage(peek_remote_usage);
66
67         conn = git_connect(fd, dest, uploadpack, 0);
68         ret = peek_remote(fd, flags);
69         close(fd[0]);
70         close(fd[1]);
71         ret |= finish_connect(conn);
72         return !!ret;
73 }