Re: [PATCH v2] submodule: Allow tracking of the newest revision of a branch in a submodule

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

 



Fabian Franz schrieb:
> Submodules currently only allow tracking a specific revision
> and each update in a submodule leads to a new commit in the
> master repository. However some users may want to always track
> the newest revision of a specific (named) tag or branch or HEAD.
> For example the user might want to track a staging branch in all
> submodules.

Personally, I don't particularly like this feature (but then, nobody
forces me to use it ;) In which situation do you need this?

By tieing a project commit to a particular submodule commit the committer
gives the guarantee: "I've tested this with this module version, and it
works; all is ok." With this new feature, this guarantee vanishes, because
the committer has no control over which version of the module will
ultimately be used; it could be newer or it could be older.

I've reviewed the patch just from a shell code writer's point of view.

> +	[ -n "$track" ] && echo "160000 0000000000000000000000000000000000000000\t$path" | git update-index --index-info

We tend to use "test" instead of "[ ]".
You cannot rely on that echo or the shell translates "\t"; use printf.

	test "$track" && printf '160000
0000000000000000000000000000000000000000\t%s\n' "$path" | git update-index
--index-info

(The line-wrapping is from my MUA; sorry.)

> @@ -327,10 +339,12 @@ cmd_update()
>  			say "Maybe you want to use 'update --init'?"
>  			continue
>  		fi
> +		track=$(git config submodule."$name".track)

You don't need $track *here*, do you?

>  		if ! test -d "$path"/.git -o -f "$path"/.git
>  		then
>  			module_clone "$path" "$url" || exit
> +
>  			subsha1=

And this extra blank line is an accident, isn't it?

> +				[ -z "$track" ] && track="HEAD"

Instead of this you can use a shell trick (but I don't know if it's portable):
				: "${track:=HEAD}"

And I think you can even spare the quotes.

> +				# if the local branch does not yet exist, create it
> +				( unset GIT_DIR; cd "$path"; git-show-ref --heads --tags -q "$track" || git branch --track "$track" "origin/$track" )

Ugh! A *branch* named "HEAD"?? I think you should reconsider this decision.

> +			if [ "$pull" = "1" ]

			if test "$pull"

> +			then
> +				# Now pull new updates from origin
> +				( unset GIT_DIR; cd "$path"; git-pull )

Wow! Creating new commits on the fly while doing a "git submodule update"!
Error check is missing here.

> @@ -596,7 +627,10 @@ cmd_status()
>  		set_name_rev "$path" "$sha1"
>  		if git diff-files --quiet -- "$path"
>  		then
> -			say " $sha1 $path$revname"
> +			track=$(git config submodule."$name".track)
> +			tracking=
> +			[ -n "$track" ] && tracking=" (tracking $track)"
> +			say " $sha1 $path$revname$tracking"

The last three lines can be shortened to this:

	say " $sha1 $path$revname${track:+ (tracking "$track")}"

-- Hannes

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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