diff: support --cached on unborn branches

"git diff --cached" (without revision) used to mean "git diff --cached
HEAD" (i.e. the user was too lazy to type HEAD). This "correctly"
failed when there was no commit yet. But was that correctness useful?

This patch changes the definition of what particular command means.
It is a request to show what _would_ be committed without further "git
add". The internal implementation is the same "git diff --cached HEAD"
when HEAD exists, but when there is no commit yet, it compares the index
with an empty tree object to achieve the desired result.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2011-02-03 13:23:34 +07:00
committed by Junio C Hamano
parent 2e9c8789b7
commit a2b7a3b3a9
5 changed files with 71 additions and 2 deletions

View File

@ -290,4 +290,15 @@ test_expect_success 'log -S requires an argument' '
test_must_fail git log -S
'
test_expect_success 'diff --cached on unborn branch' '
echo ref: refs/heads/unborn >.git/HEAD &&
git diff --cached >result &&
test_cmp "$TEST_DIRECTORY/t4013/diff.diff_--cached" result
'
test_expect_success 'diff --cached -- file on unborn branch' '
git diff --cached -- file0 >result &&
test_cmp "$TEST_DIRECTORY/t4013/diff.diff_--cached_--_file0" result
'
test_done

View File

@ -0,0 +1,38 @@
diff --git a/dir/sub b/dir/sub
new file mode 100644
index 0000000..992913c
--- /dev/null
+++ b/dir/sub
@@ -0,0 +1,8 @@
+A
+B
+C
+D
+E
+F
+1
+2
diff --git a/file0 b/file0
new file mode 100644
index 0000000..10a8a9f
--- /dev/null
+++ b/file0
@@ -0,0 +1,9 @@
+1
+2
+3
+4
+5
+6
+A
+B
+C
diff --git a/file1 b/file1
new file mode 100644
index 0000000..b1e6722
--- /dev/null
+++ b/file1
@@ -0,0 +1,3 @@
+A
+B
+C

View File

@ -0,0 +1,15 @@
diff --git a/file0 b/file0
new file mode 100644
index 0000000..10a8a9f
--- /dev/null
+++ b/file0
@@ -0,0 +1,9 @@
+1
+2
+3
+4
+5
+6
+A
+B
+C