From: Junio C Hamano Date: Fri, 20 Mar 2009 21:29:49 +0000 (-0700) Subject: Merge branch 'jc/clone-branch-rebase' X-Git-Tag: v1.6.3-rc0~124 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/0f64f874317a67d4d32bc10d85cf19e27ff0e43b?ds=inline;hp=-c Merge branch 'jc/clone-branch-rebase' * jc/clone-branch-rebase: Improve "git branch --tracking" output Make git-clone respect branch.autosetuprebase Conflicts: builtin-clone.c --- 0f64f874317a67d4d32bc10d85cf19e27ff0e43b diff --combined builtin-clone.c index efbc804a3d,a5f000adf4..7fbfbf973c --- a/builtin-clone.c +++ b/builtin-clone.c @@@ -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) { @@@ -315,21 -351,10 +316,8 @@@ 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; @@@ -340,7 -365,6 +328,7 @@@ 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; @@@ -352,6 -376,9 +340,6 @@@ 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; @@@ -360,6 -387,7 +348,6 @@@ die("--bare and --origin %s options are incompatible.", option_origin); option_no_checkout = 1; - use_separate_remote = 0; } if (!option_origin) @@@ -505,8 -533,7 +493,8 @@@ 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."); @@@ -514,7 -541,7 +502,7 @@@ 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"); } @@@ -544,7 -571,7 +532,7 @@@ 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) { @@@ -592,9 -619,6 +580,9 @@@ 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); @@@ -602,5 -626,5 +590,5 @@@ strbuf_release(&key); strbuf_release(&value); junk_pid = 0; - return 0; + return err; }