git-svn: support for funky branch and project names over HTTP(S)
[gitweb.git] / builtin-fetch--tool.c
index be341c159fb17117c4cc55a8efa9e2107375a06b..db133348a8f7f52a7f246aeb7f61a6cacbd8e3cb 100644 (file)
@@ -1,3 +1,4 @@
+#include "builtin.h"
 #include "cache.h"
 #include "refs.h"
 #include "commit.h"
@@ -6,11 +7,11 @@
 
 static char *get_stdin(void)
 {
-       int offset = 0;
+       size_t offset = 0;
        char *data = xmalloc(CHUNK_SIZE);
 
        while (1) {
-               int cnt = xread(0, data + offset, CHUNK_SIZE);
+               ssize_t cnt = xread(0, data + offset, CHUNK_SIZE);
                if (cnt < 0)
                        die("error reading standard input: %s",
                            strerror(errno));
@@ -35,17 +36,14 @@ static int update_ref(const char *action,
                      unsigned char *sha1,
                      unsigned char *oldval)
 {
-       int len;
        char msg[1024];
        char *rla = getenv("GIT_REFLOG_ACTION");
        static struct ref_lock *lock;
 
        if (!rla)
                rla = "(reflog update)";
-       len = snprintf(msg, sizeof(msg), "%s: %s", rla, action);
-       if (sizeof(msg) <= len)
-               die("insanely long action");
-       lock = lock_any_ref_for_update(refname, oldval);
+       snprintf(msg, sizeof(msg), "%s: %s", rla, action);
+       lock = lock_any_ref_for_update(refname, oldval, 0);
        if (!lock)
                return 1;
        if (write_ref_sha1(lock, sha1, msg) < 0)
@@ -150,7 +148,7 @@ static int append_fetch_head(FILE *fp,
 
        if (get_sha1(head, sha1))
                return error("Not a valid object name: %s", head);
-       commit = lookup_commit_reference(sha1);
+       commit = lookup_commit_reference_gently(sha1, 1);
        if (!commit)
                not_for_merge = 1;
 
@@ -571,9 +569,13 @@ int cmd_fetch__tool(int argc, const char **argv, const char *prefix)
                return parse_reflist(reflist);
        }
        if (!strcmp("pick-rref", argv[1])) {
+               const char *ls_remote_result;
                if (argc != 4)
                        return error("pick-rref takes 2 args");
-               return pick_rref(sopt, argv[2], argv[3]);
+               ls_remote_result = argv[3];
+               if (!strcmp(ls_remote_result, "-"))
+                       ls_remote_result = get_stdin();
+               return pick_rref(sopt, argv[2], ls_remote_result);
        }
        if (!strcmp("expand-refs-wildcard", argv[1])) {
                const char *reflist;