git-pull: allow pulling into an empty repository
[git/dscho.git] / peek-remote.c
blob353da002b4c7632ed66c1b3ceacaa985ec137627
1 #include "cache.h"
2 #include "refs.h"
3 #include "pkt-line.h"
5 static const char peek_remote_usage[] =
6 "git-peek-remote [--exec=upload-pack] [host:]directory";
7 static const char *exec = "git-upload-pack";
9 static int peek_remote(int fd[2], unsigned flags)
11 struct ref *ref;
13 get_remote_heads(fd[0], &ref, 0, NULL, flags);
14 packet_flush(fd[1]);
16 while (ref) {
17 printf("%s %s\n", sha1_to_hex(ref->old_sha1), ref->name);
18 ref = ref->next;
20 return 0;
23 int main(int argc, char **argv)
25 int i, ret;
26 char *dest = NULL;
27 int fd[2];
28 pid_t pid;
29 int nongit = 0;
30 unsigned flags = 0;
32 setup_git_directory_gently(&nongit);
34 for (i = 1; i < argc; i++) {
35 char *arg = argv[i];
37 if (*arg == '-') {
38 if (!strncmp("--exec=", arg, 7)) {
39 exec = arg + 7;
40 continue;
42 if (!strcmp("--tags", arg)) {
43 flags |= REF_TAGS;
44 continue;
46 if (!strcmp("--heads", arg)) {
47 flags |= REF_HEADS;
48 continue;
50 if (!strcmp("--refs", arg)) {
51 flags |= REF_NORMAL;
52 continue;
54 usage(peek_remote_usage);
56 dest = arg;
57 break;
60 if (!dest || i != argc - 1)
61 usage(peek_remote_usage);
63 pid = git_connect(fd, dest, exec);
64 if (pid < 0)
65 return 1;
66 ret = peek_remote(fd, flags);
67 close(fd[0]);
68 close(fd[1]);
69 ret |= finish_connect(pid);
70 return !!ret;