Merge branch 'jc/checkout-reflog-fix' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 16 Aug 2011 19:41:12 +0000 (12:41 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Aug 2011 19:41:12 +0000 (12:41 -0700)
* jc/checkout-reflog-fix:
checkout: do not write bogus reflog entry out

1  2 
builtin/checkout.c
diff --combined builtin/checkout.c
index af1e7b579a83aef15e11c0c5dfa29447e485654c,48de146b734af3dfe0a77bb285bb19bd47061993..ca855d716ccab1d1209638193e2f52e901acfba0
@@@ -715,10 -715,12 +715,12 @@@ static int switch_branches(struct check
        unsigned char rev[20];
        int flag;
        memset(&old, 0, sizeof(old));
-       old.path = resolve_ref("HEAD", rev, 0, &flag);
+       old.path = xstrdup(resolve_ref("HEAD", rev, 0, &flag));
        old.commit = lookup_commit_reference_gently(rev, 1);
-       if (!(flag & REF_ISSYMREF))
+       if (!(flag & REF_ISSYMREF)) {
+               free((char *)old.path);
                old.path = NULL;
+       }
  
        if (old.path && !prefixcmp(old.path, "refs/heads/"))
                old.name = old.path + strlen("refs/heads/");
        update_refs_for_switch(opts, &old, new);
  
        ret = post_checkout_hook(old.commit, new->commit, 1);
+       free((char *)old.path);
        return ret || opts->writeout_error;
  }
  
@@@ -1071,7 -1074,7 +1074,7 @@@ int cmd_checkout(int argc, const char *
                if (strbuf_check_branch_ref(&buf, opts.new_branch))
                        die(_("git checkout: we do not like '%s' as a branch name."),
                            opts.new_branch);
 -              if (!get_sha1(buf.buf, rev)) {
 +              if (ref_exists(buf.buf)) {
                        opts.branch_exists = 1;
                        if (!opts.new_branch_force)
                                die(_("git checkout: branch %s already exists"),