summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-09-18 17:42:15 -0700
committerJunio C Hamano <gitster@pobox.com>2007-09-18 17:42:15 -0700
commit39bd2eb56af89d43a08ba54699d9a1849ab57b39 (patch)
tree7551a984921081bf2532f68303febe7275107ed1 /t
parent68d3025a805097ec148ec6e9b0b54a5db1ef138e (diff)
parent89df580d0a2e97b0c7c072d87e5e815534deed56 (diff)
downloadgit-39bd2eb56af89d43a08ba54699d9a1849ab57b39.tar.gz
Merge branch 'master' into ph/strbuf
* master: (94 commits) Fixed update-hook example allow-users format. Documentation/git-svn: updated design philosophy notes t/t4014: test "am -3" with mode-only change. git-commit.sh: Shell script cleanup preserve executable bits in zip archives Fix lapsus in builtin-apply.c git-push: documentation and tests for pushing only branches git-svnimport: Use separate arguments in the pipe for git-rev-parse contrib/fast-import: add perl version of simple example contrib/fast-import: add simple shell example rev-list --bisect: Bisection "distance" clean up. rev-list --bisect: Move some bisection code into best_bisection. rev-list --bisect: Move finding bisection into do_find_bisection. Document ls-files --with-tree=<tree-ish> git-commit: partial commit of paths only removed from the index git-commit: Allow partial commit of file removal. send-email: make message-id generation a bit more robust git-apply: fix whitespace stripping git-gui: Disable native platform text selection in "lists" apply --index-info: fall back to current index for mode changes ...
Diffstat (limited to 't')
-rwxr-xr-xt/t2200-add-update.sh11
-rwxr-xr-xt/t3400-rebase.sh15
-rwxr-xr-xt/t4014-format-patch.sh7
-rwxr-xr-xt/t5400-send-pack.sh10
-rwxr-xr-xt/t6007-rev-list-cherry-pick-file.sh14
-rwxr-xr-xt/t7002-grep.sh4
-rwxr-xr-xt/t7102-reset.sh405
-rw-r--r--t/t7501-commit.sh32
-rwxr-xr-xt/t9500-gitweb-standalone-no-errors.sh18
9 files changed, 508 insertions, 8 deletions
diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh
index 61d08bb431..eb1ced3c37 100755
--- a/t/t2200-add-update.sh
+++ b/t/t2200-add-update.sh
@@ -16,11 +16,12 @@ only the updates to dir/sub.'
test_expect_success setup '
echo initial >check &&
echo initial >top &&
+ echo initial >foo &&
mkdir dir1 dir2 &&
echo initial >dir1/sub1 &&
echo initial >dir1/sub2 &&
echo initial >dir2/sub3 &&
- git add check dir1 dir2 top &&
+ git add check dir1 dir2 top foo &&
test_tick
git-commit -m initial &&
@@ -76,4 +77,12 @@ test_expect_success 'change gets noticed' '
'
+test_expect_success 'replace a file with a symlink' '
+
+ rm foo &&
+ ln -s top foo &&
+ git add -u -- foo
+
+'
+
test_done
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 62205b2531..95e33b5210 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -68,4 +68,19 @@ test_expect_success \
test 3 = $(git rev-list master.. | wc -l)
'
+test_expect_success 'rebase a single mode change' '
+ git checkout master &&
+ echo 1 > X &&
+ git add X &&
+ test_tick &&
+ git commit -m prepare &&
+ git checkout -b modechange HEAD^ &&
+ echo 1 > X &&
+ git add X &&
+ chmod a+x A &&
+ test_tick &&
+ git commit -m modechange A X &&
+ GIT_TRACE=1 git rebase master
+'
+
test_done
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index df969bb69c..0a6fe53375 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -10,12 +10,15 @@ test_description='Format-patch skipping already incorporated patches'
test_expect_success setup '
for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i"; done >file &&
- git add file &&
+ cat file >elif &&
+ git add file elif &&
git commit -m Initial &&
git checkout -b side &&
for i in 1 2 5 6 A B C 7 8 9 10; do echo "$i"; done >file &&
- git update-index file &&
+ chmod +x elif &&
+ git update-index file elif &&
+ git update-index --chmod=+x elif &&
git commit -m "Side changes #1" &&
for i in D E F; do echo "$i"; done >>file &&
diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh
index 6c8767e1df..57c6397be1 100755
--- a/t/t5400-send-pack.sh
+++ b/t/t5400-send-pack.sh
@@ -113,4 +113,14 @@ test_expect_success \
! git diff .git/refs/heads/master victim/.git/refs/heads/master
'
+test_expect_success \
+ 'pushing does not include non-head refs' '
+ mkdir parent && cd parent &&
+ git-init && touch file && git-add file && git-commit -m add &&
+ cd .. &&
+ git-clone parent child && cd child && git-push --all &&
+ cd ../parent &&
+ git-branch -a >branches && ! grep -q origin/master branches
+'
+
test_done
diff --git a/t/t6007-rev-list-cherry-pick-file.sh b/t/t6007-rev-list-cherry-pick-file.sh
index 3faeae6c01..4b8611ce20 100755
--- a/t/t6007-rev-list-cherry-pick-file.sh
+++ b/t/t6007-rev-list-cherry-pick-file.sh
@@ -40,4 +40,18 @@ test_expect_success '--cherry-pick bar does not come up empty' '
! test -z "$(git rev-list --left-right --cherry-pick B...C -- bar)"
'
+test_expect_success '--cherry-pick with independent, but identical branches' '
+ git symbolic-ref HEAD refs/heads/independent &&
+ rm .git/index &&
+ echo Hallo > foo &&
+ git add foo &&
+ test_tick &&
+ git commit -m "independent" &&
+ echo Bello > foo &&
+ test_tick &&
+ git commit -m "independent, too" foo &&
+ test -z "$(git rev-list --left-right --cherry-pick \
+ HEAD...master -- foo)"
+'
+
test_done
diff --git a/t/t7002-grep.sh b/t/t7002-grep.sh
index 6bfb899ed1..68b2b92879 100755
--- a/t/t7002-grep.sh
+++ b/t/t7002-grep.sh
@@ -107,6 +107,10 @@ do
diff expected actual
'
+ test_expect_failure "grep -c $L (no /dev/null)" '
+ git grep -c test $H | grep -q "/dev/null"
+ '
+
done
test_done
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
new file mode 100755
index 0000000000..f64b1cbf75
--- /dev/null
+++ b/t/t7102-reset.sh
@@ -0,0 +1,405 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Carlos Rica
+#
+
+test_description='git-reset
+
+Documented tests for git-reset'
+
+. ./test-lib.sh
+
+test_expect_success 'creating initial files and commits' '
+ test_tick &&
+ echo "1st file" >first &&
+ git add first &&
+ git commit -m "create 1st file" &&
+
+ echo "2nd file" >second &&
+ git add second &&
+ git commit -m "create 2nd file" &&
+
+ echo "2nd line 1st file" >>first &&
+ git commit -a -m "modify 1st file" &&
+
+ git rm first &&
+ git mv second secondfile &&
+ git commit -a -m "remove 1st and rename 2nd" &&
+
+ echo "1st line 2nd file" >secondfile &&
+ echo "2nd line 2nd file" >>secondfile &&
+ git commit -a -m "modify 2nd file"
+'
+# git log --pretty=oneline # to see those SHA1 involved
+
+check_changes () {
+ test "$(git rev-parse HEAD)" = "$1" &&
+ git diff | git diff .diff_expect - &&
+ git diff --cached | git diff .cached_expect - &&
+ for FILE in *
+ do
+ echo $FILE':'
+ cat $FILE || return
+ done | git diff .cat_expect -
+}
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+
+test_expect_success 'giving a non existing revision should fail' '
+ ! git reset aaaaaa &&
+ ! git reset --mixed aaaaaa &&
+ ! git reset --soft aaaaaa &&
+ ! git reset --hard aaaaaa &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+test_expect_success \
+ 'giving paths with options different than --mixed should fail' '
+ ! git reset --soft -- first &&
+ ! git reset --hard -- first &&
+ ! git reset --soft HEAD^ -- first &&
+ ! git reset --hard HEAD^ -- first &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+test_expect_success 'giving unrecognized options should fail' '
+ ! git reset --other &&
+ ! git reset -o &&
+ ! git reset --mixed --other &&
+ ! git reset --mixed -o &&
+ ! git reset --soft --other &&
+ ! git reset --soft -o &&
+ ! git reset --hard --other &&
+ ! git reset --hard -o &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+test_expect_success \
+ 'trying to do reset --soft with pending merge should fail' '
+ git branch branch1 &&
+ git branch branch2 &&
+
+ git checkout branch1 &&
+ echo "3rd line in branch1" >>secondfile &&
+ git commit -a -m "change in branch1" &&
+
+ git checkout branch2 &&
+ echo "3rd line in branch2" >>secondfile &&
+ git commit -a -m "change in branch2" &&
+
+ ! git merge branch1 &&
+ ! git reset --soft &&
+
+ printf "1st line 2nd file\n2nd line 2nd file\n3rd line" >secondfile &&
+ git commit -a -m "the change in branch2" &&
+
+ git checkout master &&
+ git branch -D branch1 branch2 &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+test_expect_success \
+ 'trying to do reset --soft with pending checkout merge should fail' '
+ git branch branch3 &&
+ git branch branch4 &&
+
+ git checkout branch3 &&
+ echo "3rd line in branch3" >>secondfile &&
+ git commit -a -m "line in branch3" &&
+
+ git checkout branch4 &&
+ echo "3rd line in branch4" >>secondfile &&
+
+ git checkout -m branch3 &&
+ ! git reset --soft &&
+
+ printf "1st line 2nd file\n2nd line 2nd file\n3rd line" >secondfile &&
+ git commit -a -m "the line in branch3" &&
+
+ git checkout master &&
+ git branch -D branch3 branch4 &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+test_expect_success \
+ 'resetting to HEAD with no changes should succeed and do nothing' '
+ git reset --hard &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset --hard HEAD &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset --soft &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset --soft HEAD &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset --mixed &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset --mixed HEAD &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+ git reset HEAD &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+>.diff_expect
+cat >.cached_expect <<EOF
+diff --git a/secondfile b/secondfile
+index 1bbba79..44c5b58 100644
+--- a/secondfile
++++ b/secondfile
+@@ -1 +1,2 @@
+-2nd file
++1st line 2nd file
++2nd line 2nd file
+EOF
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+test_expect_success '--soft reset only should show changes in diff --cached' '
+ git reset --soft HEAD^ &&
+ check_changes d1a4bc3abce4829628ae2dcb0d60ef3d1a78b1c4 &&
+ test "$(git rev-parse ORIG_HEAD)" = \
+ 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+3rd line 2nd file
+EOF
+test_expect_success \
+ 'changing files and redo the last commit should succeed' '
+ echo "3rd line 2nd file" >>secondfile &&
+ git commit -a -C ORIG_HEAD &&
+ check_changes 3d3b7be011a58ca0c179ae45d94e6c83c0b0cd0d &&
+ test "$(git rev-parse ORIG_HEAD)" = \
+ 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+first:
+1st file
+2nd line 1st file
+second:
+2nd file
+EOF
+test_expect_success \
+ '--hard reset should change the files and undo commits permanently' '
+ git reset --hard HEAD~2 &&
+ check_changes ddaefe00f1da16864591c61fdc7adb5d7cd6b74e &&
+ test "$(git rev-parse ORIG_HEAD)" = \
+ 3d3b7be011a58ca0c179ae45d94e6c83c0b0cd0d
+'
+
+>.diff_expect
+cat >.cached_expect <<EOF
+diff --git a/first b/first
+deleted file mode 100644
+index 8206c22..0000000
+--- a/first
++++ /dev/null
+@@ -1,2 +0,0 @@
+-1st file
+-2nd line 1st file
+diff --git a/second b/second
+deleted file mode 100644
+index 1bbba79..0000000
+--- a/second
++++ /dev/null
+@@ -1 +0,0 @@
+-2nd file
+diff --git a/secondfile b/secondfile
+new file mode 100644
+index 0000000..44c5b58
+--- /dev/null
++++ b/secondfile
+@@ -0,0 +1,2 @@
++1st line 2nd file
++2nd line 2nd file
+EOF
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+test_expect_success \
+ 'redoing changes adding them without commit them should succeed' '
+ git rm first &&
+ git mv second secondfile &&
+
+ echo "1st line 2nd file" >secondfile &&
+ echo "2nd line 2nd file" >>secondfile &&
+ git add secondfile &&
+ check_changes ddaefe00f1da16864591c61fdc7adb5d7cd6b74e
+'
+
+cat >.diff_expect <<EOF
+diff --git a/first b/first
+deleted file mode 100644
+index 8206c22..0000000
+--- a/first
++++ /dev/null
+@@ -1,2 +0,0 @@
+-1st file
+-2nd line 1st file
+diff --git a/second b/second
+deleted file mode 100644
+index 1bbba79..0000000
+--- a/second
++++ /dev/null
+@@ -1 +0,0 @@
+-2nd file
+EOF
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+test_expect_success '--mixed reset to HEAD should unadd the files' '
+ git reset &&
+ check_changes ddaefe00f1da16864591c61fdc7adb5d7cd6b74e &&
+ test "$(git rev-parse ORIG_HEAD)" = \
+ ddaefe00f1da16864591c61fdc7adb5d7cd6b74e
+'
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+test_expect_success 'redoing the last two commits should succeed' '
+ git add secondfile &&
+ git reset --hard ddaefe00f1da16864591c61fdc7adb5d7cd6b74e &&
+
+ git rm first &&
+ git mv second secondfile &&
+ git commit -a -m "remove 1st and rename 2nd" &&
+
+ echo "1st line 2nd file" >secondfile &&
+ echo "2nd line 2nd file" >>secondfile &&
+ git commit -a -m "modify 2nd file" &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+3rd line in branch2
+EOF
+test_expect_success '--hard reset to HEAD should clear a failed merge' '
+ git branch branch1 &&
+ git branch branch2 &&
+
+ git checkout branch1 &&
+ echo "3rd line in branch1" >>secondfile &&
+ git commit -a -m "change in branch1" &&
+
+ git checkout branch2 &&
+ echo "3rd line in branch2" >>secondfile &&
+ git commit -a -m "change in branch2" &&
+
+ ! git pull . branch1 &&
+ git reset --hard &&
+ check_changes 77abb337073fb4369a7ad69ff6f5ec0e4d6b54bb
+'
+
+>.diff_expect
+>.cached_expect
+cat >.cat_expect <<EOF
+secondfile:
+1st line 2nd file
+2nd line 2nd file
+EOF
+test_expect_success \
+ '--hard reset to ORIG_HEAD should clear a fast-forward merge' '
+ git reset --hard HEAD^ &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc &&
+
+ git pull . branch1 &&
+ git reset --hard ORIG_HEAD &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc &&
+
+ git checkout master &&
+ git branch -D branch1 branch2 &&
+ check_changes 3ec39651e7f44ea531a5de18a9fa791c0fd370fc
+'
+
+cat > expect << EOF
+diff --git a/file1 b/file1
+index d00491f..7ed6ff8 100644
+--- a/file1
++++ b/file1
+@@ -1 +1 @@
+-1
++5
+diff --git a/file2 b/file2
+deleted file mode 100644
+index 0cfbf08..0000000
+--- a/file2
++++ /dev/null
+@@ -1 +0,0 @@
+-2
+EOF
+cat > cached_expect << EOF
+diff --git a/file4 b/file4
+new file mode 100644
+index 0000000..b8626c4
+--- /dev/null
++++ b/file4
+@@ -0,0 +1 @@
++4
+EOF
+test_expect_success 'test --mixed <paths>' '
+ echo 1 > file1 &&
+ echo 2 > file2 &&
+ git add file1 file2 &&
+ test_tick &&
+ git commit -m files &&
+ git rm file2 &&
+ echo 3 > file3 &&
+ echo 4 > file4 &&
+ echo 5 > file1 &&
+ git add file1 file3 file4 &&
+ ! git reset HEAD -- file1 file2 file3 &&
+ git diff > output &&
+ git diff output expect &&
+ git diff --cached > output &&
+ git diff output cached_expect
+'
+
+test_expect_success 'test resetting the index at give paths' '
+
+ mkdir sub &&
+ >sub/file1 &&
+ >sub/file2 &&
+ git update-index --add sub/file1 sub/file2 &&
+ T=$(git write-tree) &&
+ ! git reset HEAD sub/file2 &&
+ U=$(git write-tree) &&
+ echo "$T" &&
+ echo "$U" &&
+ ! git diff-index --cached --exit-code "$T" &&
+ test "$T" != "$U"
+
+'
+
+test_done
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index 6bd3c9e3e0..b151b51a34 100644
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -131,4 +131,36 @@ test_expect_success \
'validate git-rev-list output.' \
'diff current expected'
+test_expect_success 'partial commit that involves removal (1)' '
+
+ git rm --cached file &&
+ mv file elif &&
+ git add elif &&
+ git commit -m "Partial: add elif" elif &&
+ git diff-tree --name-status HEAD^ HEAD >current &&
+ echo "A elif" >expected &&
+ diff expected current
+
+'
+
+test_expect_success 'partial commit that involves removal (2)' '
+
+ git commit -m "Partial: remove file" file &&
+ git diff-tree --name-status HEAD^ HEAD >current &&
+ echo "D file" >expected &&
+ diff expected current
+
+'
+
+test_expect_success 'partial commit that involves removal (3)' '
+
+ git rm --cached elif &&
+ echo elif >elif &&
+ git commit -m "Partial: modify elif" elif &&
+ git diff-tree --name-status HEAD^ HEAD >current &&
+ echo "M elif" >expected &&
+ diff expected current
+
+'
+
test_done
diff --git a/t/t9500-gitweb-standalone-no-errors.sh b/t/t9500-gitweb-standalone-no-errors.sh
index fa32598b0c..642b836d64 100755
--- a/t/t9500-gitweb-standalone-no-errors.sh
+++ b/t/t9500-gitweb-standalone-no-errors.sh
@@ -58,6 +58,14 @@ gitweb_run () {
# gitweb.log is left for debugging
}
+safe_chmod () {
+ chmod "$1" "$2" &&
+ if [ "$(git config --get core.filemode)" = false ]
+ then
+ git update-index --chmod="$1" "$2"
+ fi
+}
+
. ./test-lib.sh
perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
@@ -229,7 +237,7 @@ test_debug 'cat gitweb.log'
test_expect_success \
'commitdiff(0): mode change' \
- 'chmod a+x new_file &&
+ 'safe_chmod +x new_file &&
git commit -a -m "Mode changed." &&
gitweb_run "p=.git;a=commitdiff"'
test_debug 'cat gitweb.log'
@@ -268,7 +276,7 @@ test_debug 'cat gitweb.log'
test_expect_success \
'commitdiff(0): mode change and modified' \
'echo "New line" >> file2 &&
- chmod a+x file2 &&
+ safe_chmod +x file2 &&
git commit -a -m "Mode change and modification." &&
gitweb_run "p=.git;a=commitdiff"'
test_debug 'cat gitweb.log'
@@ -295,7 +303,7 @@ test_expect_success \
'commitdiff(0): renamed, mode change and modified' \
'git mv file3 file2 &&
echo "Propter nomen suum." >> file2 &&
- chmod a+x file2 &&
+ safe_chmod +x file2 &&
git commit -a -m "File rename, mode change and modification." &&
gitweb_run "p=.git;a=commitdiff"'
test_debug 'cat gitweb.log'
@@ -412,10 +420,10 @@ test_expect_success \
git add 03-new &&
git mv 04-rename-from 04-rename-to &&
echo "Changed" >> 04-rename-to &&
- chmod a+x 05-mode-change &&
+ safe_chmod +x 05-mode-change &&
rm -f 06-file-or-symlink && ln -s 01-change 06-file-or-symlink &&
echo "Changed and have mode changed" > 07-change-mode-change &&
- chmod a+x 07-change-mode-change &&
+ safe_chmod +x 07-change-mode-change &&
git commit -a -m "Large commit" &&
git checkout master'