Merge branch 'jc/clone-branch-rebase'
authorJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2009 21:29:49 +0000 (14:29 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2009 21:29:49 +0000 (14:29 -0700)
* jc/clone-branch-rebase:
Improve "git branch --tracking" output
Make git-clone respect branch.autosetuprebase

Conflicts:
builtin-clone.c

1  2 
builtin-clone.c
diff --combined builtin-clone.c
index efbc804a3d1c1f9edb1c8c21bc382f8c1c3836ff,a5f000adf456e8faee97c9db0e54713c0b4b3330..7fbfbf973c79494fe20a7d25cb3383da31574829
@@@ -20,8 -20,7 +20,9 @@@
  #include "dir.h"
  #include "pack-refs.h"
  #include "sigchain.h"
+ #include "branch.h"
 +#include "remote.h"
 +#include "run-command.h"
  
  /*
   * Overall FIXMEs:
@@@ -295,6 -294,43 +296,6 @@@ static void remove_junk_on_signal(int s
        raise(signo);
  }
  
 -static const struct ref *locate_head(const struct ref *refs,
 -                                   const struct ref *mapped_refs,
 -                                   const struct ref **remote_head_p)
 -{
 -      const struct ref *remote_head = NULL;
 -      const struct ref *remote_master = NULL;
 -      const struct ref *r;
 -      for (r = refs; r; r = r->next)
 -              if (!strcmp(r->name, "HEAD"))
 -                      remote_head = r;
 -
 -      for (r = mapped_refs; r; r = r->next)
 -              if (!strcmp(r->name, "refs/heads/master"))
 -                      remote_master = r;
 -
 -      if (remote_head_p)
 -              *remote_head_p = remote_head;
 -
 -      /* If there's no HEAD value at all, never mind. */
 -      if (!remote_head)
 -              return NULL;
 -
 -      /* If refs/heads/master could be right, it is. */
 -      if (remote_master && !hashcmp(remote_master->old_sha1,
 -                                    remote_head->old_sha1))
 -              return remote_master;
 -
 -      /* Look for another ref that points there */
 -      for (r = mapped_refs; r; r = r->next)
 -              if (r != remote_head &&
 -                  !hashcmp(r->old_sha1, remote_head->old_sha1))
 -                      return r;
 -
 -      /* Nothing is the same */
 -      return NULL;
 -}
 -
  static struct ref *write_remote_refs(const struct ref *refs,
                struct refspec *refspec, const char *reflog)
  {
        return local_refs;
  }
  
- static void install_branch_config(const char *local,
-                                 const char *origin,
-                                 const char *remote)
- {
-       struct strbuf key = STRBUF_INIT;
-       strbuf_addf(&key, "branch.%s.remote", local);
-       git_config_set(key.buf, origin);
-       strbuf_reset(&key);
-       strbuf_addf(&key, "branch.%s.merge", local);
-       git_config_set(key.buf, remote);
-       strbuf_release(&key);
- }
  int cmd_clone(int argc, const char **argv, const char *prefix)
  {
 -      int use_local_hardlinks = 1;
 -      int use_separate_remote = 1;
        int is_bundle = 0;
        struct stat buf;
        const char *repo_name, *repo, *work_tree, *git_dir;
        struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
        struct transport *transport = NULL;
        char *src_ref_prefix = "refs/heads/";
 +      int err = 0;
  
        struct refspec refspec;
  
        if (argc == 0)
                die("You must specify a repository to clone.");
  
 -      if (option_no_hardlinks)
 -              use_local_hardlinks = 0;
 -
        if (option_mirror)
                option_bare = 1;
  
                        die("--bare and --origin %s options are incompatible.",
                            option_origin);
                option_no_checkout = 1;
 -              use_separate_remote = 0;
        }
  
        if (!option_origin)
  
                mapped_refs = write_remote_refs(refs, &refspec, reflog_msg.buf);
  
 -              head_points_at = locate_head(refs, mapped_refs, &remote_head);
 +              remote_head = find_ref_by_name(refs, "HEAD");
 +              head_points_at = guess_remote_head(remote_head, mapped_refs, 0);
        }
        else {
                warning("You appear to have cloned an empty repository.");
                remote_head = NULL;
                option_no_checkout = 1;
                if (!option_bare)
-                       install_branch_config("master", option_origin,
+                       install_branch_config(0, "master", option_origin,
                                              "refs/heads/master");
        }
  
                                      head_points_at->peer_ref->name,
                                      reflog_msg.buf);
  
-                       install_branch_config(head, option_origin,
+                       install_branch_config(0, head, option_origin,
                                              head_points_at->name);
                }
        } else if (remote_head) {
                if (write_cache(fd, active_cache, active_nr) ||
                    commit_locked_index(lock_file))
                        die("unable to write new index file");
 +
 +              err |= run_hook(NULL, "post-checkout", sha1_to_hex(null_sha1),
 +                              sha1_to_hex(remote_head->old_sha1), "1", NULL);
        }
  
        strbuf_release(&reflog_msg);
        strbuf_release(&key);
        strbuf_release(&value);
        junk_pid = 0;
 -      return 0;
 +      return err;
  }