Re: [PATCH v2 3/3] worktree: teach "add" to check out existing branches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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) {



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux