On Sun, Feb 04, 2018 at 10:13:05PM +0000, Thomas Gummerer wrote:
> - if (opts->new_branch)
> + if (opts->checkout_existing_branch)
> + fprintf(stderr, _(", checking out existing branch '%s'"),
> + refname);
> + else if (opts->new_branch)
> fprintf(stderr, _(", creating new branch '%s'"),
> opts->new_branch);
I wonder if "creating branch" and "checkout out branch" are enough.
> @@ -423,14 +427,25 @@ static int add(int ac, const char **av, const char
> *prefix)
> if (ac < 2 && !opts.new_branch && !opts.detach) {
> int n;
> const char *s = worktree_basename(path, &n);
> - opts.new_branch = xstrndup(s, n);
> - if (guess_remote) {
> - struct object_id oid;
> - const char *remote =
> - unique_tracking_name(opts.new_branch, &oid);
> - if (remote)
> - branch = remote;
> + const char *branchname = xstrndup(s, n);
> + struct strbuf ref = STRBUF_INIT;
> +
> + if (!strbuf_check_branch_ref(&ref, branchname) &&
> + ref_exists(ref.buf)) {
> + branch = branchname;
> + opts.checkout_existing_branch = 1;
> + UNLEAK(branch);
> + } else {
> + opts.new_branch = branchname;
> + if (guess_remote) {
> + struct object_id oid;
> + const char *remote =
> + unique_tracking_name(opts.new_branch,
> &oid);
Deep indentation may be a sign that it's time to move all this code to
a separate function, maybe dwim_branch() or something.
> + if (remote)
> + branch = remote;
> + }
> }
> + strbuf_release(&ref);
> }
>
> if (ac == 2 && !opts.new_branch && !opts.detach) {