We do not like "HEAD" as a new branch name
[git.git] / fetch-pack.c
index 3df9911..58ba209 100644 (file)
@@ -38,9 +38,9 @@ static void rev_list_push(struct commit *commit, int mark)
 
 static int rev_list_insert_ref(const char *path, const unsigned char *sha1)
 {
-       struct object *o = deref_tag(parse_object(sha1));
+       struct object *o = deref_tag(parse_object(sha1), path, 0);
 
-       if (o->type == commit_type)
+       if (o && o->type == commit_type)
                rev_list_push((struct commit *)o, SEEN);
 
        return 0;
@@ -317,7 +317,8 @@ static int everything_local(struct ref **refs, int nr_match, char **match)
         * Don't mark them common yet; the server has to be told so first.
         */
        for (ref = *refs; ref; ref = ref->next) {
-               struct object *o = deref_tag(lookup_object(ref->old_sha1));
+               struct object *o = deref_tag(lookup_object(ref->old_sha1),
+                                            NULL, 0);
 
                if (!o || o->type != commit_type || !(o->flags & COMPLETE))
                        continue;
@@ -423,6 +424,8 @@ int main(int argc, char **argv)
        int fd[2];
        pid_t pid;
 
+       setup_git_directory();
+
        nr_heads = 0;
        heads = NULL;
        for (i = 1; i < argc; i++) {
@@ -457,5 +460,19 @@ int main(int argc, char **argv)
        close(fd[0]);
        close(fd[1]);
        finish_connect(pid);
+
+       if (!ret && nr_heads) {
+               /* If the heads to pull were given, we should have
+                * consumed all of them by matching the remote.
+                * Otherwise, 'git-fetch remote no-such-ref' would
+                * silently succeed without issuing an error.
+                */
+               for (i = 0; i < nr_heads; i++)
+                       if (heads[i] && heads[i][0]) {
+                               error("no such remote ref %s", heads[i]);
+                               ret = 1;
+                       }
+       }
+
        return ret;
 }