peek-remote.con commit git-fetch: use fetch--tool pick-rref to avoid local fetch from alternate (e3c6f24)
   1#include "cache.h"
   2#include "refs.h"
   3#include "pkt-line.h"
   4
   5static const char peek_remote_usage[] =
   6"git-peek-remote [--upload-pack=<git-upload-pack>] [<host>:]<directory>";
   7static const char *uploadpack = "git-upload-pack";
   8
   9static 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
  23int main(int argc, char **argv)
  24{
  25        int i, ret;
  26        char *dest = NULL;
  27        int fd[2];
  28        pid_t pid;
  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        pid = git_connect(fd, dest, uploadpack);
  68        if (pid < 0)
  69                return 1;
  70        ret = peek_remote(fd, flags);
  71        close(fd[0]);
  72        close(fd[1]);
  73        ret |= finish_connect(pid);
  74        return !!ret;
  75}