Merge branch 'mh/ref-api-less-extra-refs'
authorJunio C Hamano <gitster@pobox.com>
Mon, 9 Jan 2012 23:58:43 +0000 (15:58 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Jan 2012 23:58:43 +0000 (15:58 -0800)
* mh/ref-api-less-extra-refs:
write_head_info(): handle "extra refs" locally
show_ref(): remove unused "flag" and "cb_data" arguments
receive-pack: move more work into write_head_info()

1  2 
builtin/receive-pack.c
diff --combined builtin/receive-pack.c
index d2dcb7e4af259a43a539f83ab5961472c594c99a,0bb91d4479c4881b310ac48142642b757448e456..8c9e91e78c95a4a3d581aae59d0f00bc95b2c942
@@@ -37,7 -37,6 +37,7 @@@ static int prefer_ofs_delta = 1
  static int auto_update_server_info;
  static int auto_gc = 1;
  static const char *head_name;
 +static void *head_name_to_free;
  static int sent_capabilities;
  
  static enum deny_action parse_deny_action(const char *var, const char *value)
@@@ -115,7 -114,7 +115,7 @@@ static int receive_pack_config(const ch
        return git_default_config(var, value, cb);
  }
  
- static int show_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+ static void show_ref(const char *path, const unsigned char *sha1)
  {
        if (sent_capabilities)
                packet_write(1, "%s %s\n", sha1_to_hex(sha1), path);
                             " report-status delete-refs side-band-64k",
                             prefer_ofs_delta ? " ofs-delta" : "");
        sent_capabilities = 1;
-       return 0;
  }
  
- static int show_ref_cb(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+ static int show_ref_cb(const char *path, const unsigned char *sha1, int flag, void *unused)
  {
        path = strip_namespace(path);
        /*
         */
        if (!path)
                path = ".have";
-       return show_ref(path, sha1, flag, cb_data);
+       show_ref(path, sha1);
+       return 0;
+ }
+ static void show_one_alternate_sha1(const unsigned char sha1[20], void *unused)
+ {
+       show_ref(".have", sha1);
+ }
+ static void collect_one_alternate_ref(const struct ref *ref, void *data)
+ {
+       struct sha1_array *sa = data;
+       sha1_array_append(sa, ref->old_sha1);
  }
  
  static void write_head_info(void)
  {
+       struct sha1_array sa = SHA1_ARRAY_INIT;
+       for_each_alternate_ref(collect_one_alternate_ref, &sa);
+       sha1_array_for_each_unique(&sa, show_one_alternate_sha1, NULL);
+       sha1_array_clear(&sa);
        for_each_ref(show_ref_cb, NULL);
        if (!sent_capabilities)
-               show_ref("capabilities^{}", null_sha1, 0, NULL);
+               show_ref("capabilities^{}", null_sha1);
  
+       /* EOF */
+       packet_flush(1);
  }
  
  struct command {
@@@ -572,7 -588,7 +589,7 @@@ static void check_aliased_update(struc
        int flag;
  
        strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
 -      dst_name = resolve_ref(buf.buf, sha1, 0, &flag);
 +      dst_name = resolve_ref_unsafe(buf.buf, sha1, 0, &flag);
        strbuf_release(&buf);
  
        if (!(flag & REF_ISSYMREF))
@@@ -696,8 -712,10 +713,8 @@@ static void execute_commands(struct com
  
        check_aliased_updates(commands);
  
 -      free((char *)head_name);
 -      head_name = resolve_ref("HEAD", sha1, 0, NULL);
 -      if (head_name)
 -              head_name = xstrdup(head_name);
 +      free(head_name_to_free);
 +      head_name = head_name_to_free = resolve_refdup("HEAD", sha1, 0, NULL);
  
        for (cmd = commands; cmd; cmd = cmd->next)
                if (!cmd->skip_update)
@@@ -869,25 -887,6 +886,6 @@@ static int delete_only(struct command *
        return 1;
  }
  
- static void add_one_alternate_sha1(const unsigned char sha1[20], void *unused)
- {
-       add_extra_ref(".have", sha1, 0);
- }
- static void collect_one_alternate_ref(const struct ref *ref, void *data)
- {
-       struct sha1_array *sa = data;
-       sha1_array_append(sa, ref->old_sha1);
- }
- static void add_alternate_refs(void)
- {
-       struct sha1_array sa = SHA1_ARRAY_INIT;
-       for_each_alternate_ref(collect_one_alternate_ref, &sa);
-       sha1_array_for_each_unique(&sa, add_one_alternate_sha1, NULL);
-       sha1_array_clear(&sa);
- }
  int cmd_receive_pack(int argc, const char **argv, const char *prefix)
  {
        int advertise_refs = 0;
                unpack_limit = receive_unpack_limit;
  
        if (advertise_refs || !stateless_rpc) {
-               add_alternate_refs();
                write_head_info();
-               clear_extra_refs();
-               /* EOF */
-               packet_flush(1);
        }
        if (advertise_refs)
                return 0;