[PATCH] contrib/subtree: verify HEAD is valid before adding a subtree

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

 



From: Bingwu Zhang <xtex@xxxxxxx>

After initializing a new repository or switching to a orphan branch,
HEAD is a symbolic reference to refs/heads/xxx while the pointed branch
head does not exist until a initial commit.

"git subtree add" will try to ensure that working tree and index are
clean, but as HEAD is invalid, diff-index always fails:
  fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'
  fatal: working tree has modifications.  Cannot add.
It says "working tree has modifications" but it is not the case.

Add a check using "git show-ref --verify" to ensure that HEAD is a valid
reference and give a clearer error message.

Signed-off-by: Bingwu Zhang <xtex@xxxxxxx>
---
 contrib/subtree/git-subtree.sh | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 15ae86db1b27..41eb816e454a 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -770,6 +770,11 @@ copy_or_skip () {
 # Usage: ensure_clean
 ensure_clean () {
 	assert test $# = 0
+	# verify HEAD, or else "git diff-index HEAD" will fail
+	if ! git show-ref --verify --quiet HEAD 2>&1
+	then
+		die "fatal: HEAD is not a valid reference.   Subtree cannot be committed as the first commit of a branch."
+	fi
 	if ! git diff-index HEAD --exit-code --quiet 2>&1
 	then
 		die "fatal: working tree has modifications.  Cannot add."

base-commit: f93ff170b93a1782659637824b25923245ac9dd1
-- 
2.48.1





[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