summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2005-08-11 22:12:29 -0700
committerLibravatar Junio C Hamano <junkio@cox.net>2005-08-11 22:12:29 -0700
commit8eb14dc1882ade6f881ae93dfd7ecaa0dc0f0fdc (patch)
treed3d4506e20175ba73c64dfb9cefb189c1dd9127a
parentStart preparing for 0.99.5 (diff)
parent[PATCH] Also parse objects we already have (diff)
downloadtgif-8eb14dc1882ade6f881ae93dfd7ecaa0dc0f0fdc.tar.xz
Merge changes in the master branch into 0.99.5 preparation branch.
-rw-r--r--Makefile3
-rw-r--r--debian/changelog8
-rw-r--r--debian/control10
-rw-r--r--debian/copyright25
-rw-r--r--debian/docs2
-rw-r--r--debian/git-core.files1
-rw-r--r--debian/git-core.install1
-rw-r--r--debian/git-tk.files1
-rwxr-xr-xdebian/rules4
-rwxr-xr-xgitk47
-rw-r--r--merge-base.c97
-rw-r--r--pull.c58
-rwxr-xr-xt/t1001-read-tree-m-2way.sh8
-rwxr-xr-xt/t1002-read-tree-m-u-2way.sh8
-rwxr-xr-xt/t1005-read-tree-m-2way-emu23.sh10
-rwxr-xr-xt/t2003-checkout-cache-mkdir.sh1
-rwxr-xr-xt/t3001-ls-files-others-exclude.sh2
-rwxr-xr-xt/t4002-diff-basic.sh6
-rwxr-xr-xt/t4101-apply-nonl.sh2
-rwxr-xr-xt/t5300-pack-object.sh12
-rwxr-xr-xt/t5400-send-pack.sh6
-rwxr-xr-xt/test-lib.sh32
22 files changed, 245 insertions, 99 deletions
diff --git a/Makefile b/Makefile
index f8d74e08a8..6bc3ed7977 100644
--- a/Makefile
+++ b/Makefile
@@ -244,7 +244,8 @@ deb: dist
clean:
rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROG) $(LIB_FILE)
- rm -f $(GIT_TARNAME).tar.gz git-core.spec git-core_$(GIT_VERSION)-*.deb
+ rm -f $(GIT_TARNAME).tar.gz git-core.spec
+ rm -f git-core_$(GIT_VERSION)-*.deb git-tk_$(GIT_VERSION)-*.deb
rm -rf $(GIT_TARNAME)
$(MAKE) -C tools/ clean
$(MAKE) -C Documentation/ clean
diff --git a/debian/changelog b/debian/changelog
index dd86f82d8b..28cfb0f84f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,14 @@ git-core (0.99.5-0) unstable; urgency=low
-- Junio C Hamano <junkio@cox.net> Wed, 10 Aug 2005 22:05:00 -0700
+git-core (0.99.4-3) unstable; urgency=low
+
+ * Split off gitk.
+ * Do not depend on diff which is an essential package.
+ * Use dh_movefiles, not dh_install, to stage two subpackages.
+
+ -- Matthias Urlichs <smurf@debian.org> Thu, 11 Aug 2005 01:43:24 +0200
+
git-core (0.99.4-2) unstable; urgency=low
* Git 0.99.4 official release.
diff --git a/debian/control b/debian/control
index 8bdbd731f3..53b87f44a6 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@ Standards-Version: 3.6.1
Package: git-core
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, patch, diff, rcs
+Depends: ${shlibs:Depends}, ${misc:Depends}, patch, rcs
Recommends: rsync, curl, ssh, libmail-sendmail-perl, libemail-valid-perl
Conflicts: git
Description: The git content addressable filesystem
@@ -15,5 +15,11 @@ Description: The git content addressable filesystem
and flexible filesystem-based database designed to store directory trees
with regard to their history. The top layer is a SCM-like tool which
enables human beings to work with the database in a manner to a degree
- similar to other SCM tools (like CVS, BitKeeper or Monotone).
+ similar to other SCM tools.
+
+Package: git-tk
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, tk8.4
+Description: The git content addressable filesystem, GUI add-on
+ This package contains 'gitk', the git revision tree visualizer.
diff --git a/debian/copyright b/debian/copyright
index 32b7e9c540..ea61effc40 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,3 +1,24 @@
-License:
+This package was downloaded from ftp.kernel.org:/pub/software/scm/git/.
-GPL v2 (see COPYING for details)
+Upstream Author: Linus Torvalds and many others
+
+Copyright:
+
+ Copyright 2005, Linus Torvalds and others.
+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 dated June, 1991.
+
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
diff --git a/debian/docs b/debian/docs
index a252d0f2ca..e845566c06 100644
--- a/debian/docs
+++ b/debian/docs
@@ -1,3 +1 @@
README
-COPYING
-
diff --git a/debian/git-core.files b/debian/git-core.files
new file mode 100644
index 0000000000..74e4e23b01
--- /dev/null
+++ b/debian/git-core.files
@@ -0,0 +1 @@
+/usr
diff --git a/debian/git-core.install b/debian/git-core.install
deleted file mode 100644
index 72e8ffc0db..0000000000
--- a/debian/git-core.install
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/debian/git-tk.files b/debian/git-tk.files
new file mode 100644
index 0000000000..3801e7564b
--- /dev/null
+++ b/debian/git-tk.files
@@ -0,0 +1 @@
+/usr/bin/gitk
diff --git a/debian/rules b/debian/rules
index 2c575ffa19..921aeecfb4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -61,7 +61,9 @@ install: build
mkdir -p $(DOC_DESTDIR)
find $(DOC) '(' -name '*.txt' -o -name '*.html' ')' -exec install {} $(DOC_DESTDIR) ';'
- dh_install --list-missing --sourcedir=$(DESTDIR)
+ dh_movefiles -p git-tk
+ dh_movefiles -p git-core
+ find debian/tmp -type d -o -print | sed -e 's/^/? /'
binary: build install
dh_testdir
diff --git a/gitk b/gitk
index 6a6d4b2435..6dc4b24f06 100755
--- a/gitk
+++ b/gitk
@@ -31,7 +31,7 @@ proc getcommits {rargs} {
set phase getcommits
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100]
- set ncmupdate 0
+ set ncmupdate 1
if [catch {
set parse_args [concat --default HEAD $rargs]
set parsed_args [split [eval exec git-rev-parse $parse_args] "\n"]
@@ -62,7 +62,6 @@ proc getcommitlines {commfd} {
global commits parents cdate children nchildren
global commitlisted phase commitinfo nextupdate
global stopped redisplaying leftover
- global numcommits ncmupdate
set stuff [read $commfd]
if {$stuff == {}} {
@@ -110,10 +109,8 @@ to allow selection of commits to be displayed.)}
set commitlisted($id) 1
parsecommit $id $cmit 1
drawcommit $id
- if {[clock clicks -milliseconds] >= $nextupdate
- && $numcommits >= $ncmupdate + 100} {
- doupdate
- set ncmupdate $numcommits
+ if {[clock clicks -milliseconds] >= $nextupdate} {
+ doupdate 1
}
while {$redisplaying} {
set redisplaying 0
@@ -123,10 +120,8 @@ to allow selection of commits to be displayed.)}
foreach id $commits {
drawcommit $id
if {$stopped} break
- if {[clock clicks -milliseconds] >= $nextupdate
- && $numcommits >= $ncmupdate + 100} {
- doupdate
- set ncmupdate $numcommits
+ if {[clock clicks -milliseconds] >= $nextupdate} {
+ doupdate 1
}
}
}
@@ -134,13 +129,24 @@ to allow selection of commits to be displayed.)}
}
}
-proc doupdate {} {
- global commfd nextupdate
+proc doupdate {reading} {
+ global commfd nextupdate numcommits ncmupdate
- incr nextupdate 100
- fileevent $commfd readable {}
+ if {$reading} {
+ fileevent $commfd readable {}
+ }
update
- fileevent $commfd readable [list getcommitlines $commfd]
+ set nextupdate [expr {[clock clicks -milliseconds] + 100}]
+ if {$numcommits < 100} {
+ set ncmupdate [expr {$numcommits + 1}]
+ } elseif {$numcommits < 10000} {
+ set ncmupdate [expr {$numcommits + 10}]
+ } else {
+ set ncmupdate [expr {$numcommits + 100}]
+ }
+ if {$reading} {
+ fileevent $commfd readable [list getcommitlines $commfd]
+ }
}
proc readcommit {id} {
@@ -1127,8 +1133,7 @@ proc drawcommit {id} {
}
if {[clock clicks -milliseconds] >= $nextupdate
&& $numcommits >= $ncmupdate} {
- doupdate
- set ncmupdate $numcommits
+ doupdate 1
if {$stopped} break
}
}
@@ -1171,7 +1176,7 @@ proc drawgraph {} {
if {$startcommits == {}} return
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100]
- set ncmupdate 0
+ set ncmupdate 1
initgraph
set todo [lindex $startcommits 0]
drawrest 0 1
@@ -1210,10 +1215,8 @@ proc drawrest {level startix} {
drawslants $level
}
if {[clock clicks -milliseconds] >= $nextupdate
- && $numcommits >= $ncmupdate + 100} {
- update
- incr nextupdate 100
- set ncmupdate $numcommits
+ && $numcommits >= $ncmupdate} {
+ doupdate 0
}
}
}
diff --git a/merge-base.c b/merge-base.c
index 591956666d..923256c821 100644
--- a/merge-base.c
+++ b/merge-base.c
@@ -2,6 +2,86 @@
#include "cache.h"
#include "commit.h"
+#define PARENT1 1
+#define PARENT2 2
+#define UNINTERESTING 4
+
+static struct commit *interesting(struct commit_list *list)
+{
+ while (list) {
+ struct commit *commit = list->item;
+ list = list->next;
+ if (commit->object.flags & UNINTERESTING)
+ continue;
+ return commit;
+ }
+ return NULL;
+}
+
+/*
+ * A pathological example of how this thing works.
+ *
+ * Suppose we had this commit graph, where chronologically
+ * the timestamp on the commit are A <= B <= C <= D <= E <= F
+ * and we are trying to figure out the merge base for E and F
+ * commits.
+ *
+ * F
+ * / \
+ * E A D
+ * \ / /
+ * B /
+ * \ /
+ * C
+ *
+ * First we push E and F to list to be processed. E gets bit 1
+ * and F gets bit 2. The list becomes:
+ *
+ * list=F(2) E(1), result=empty
+ *
+ * Then we pop F, the newest commit, from the list. Its flag is 2.
+ * We scan its parents, mark them reachable from the side that F is
+ * reachable from, and push them to the list:
+ *
+ * list=E(1) D(2) A(2), result=empty
+ *
+ * Next pop E and do the same.
+ *
+ * list=D(2) B(1) A(2), result=empty
+ *
+ * Next pop D and do the same.
+ *
+ * list=C(2) B(1) A(2), result=empty
+ *
+ * Next pop C and do the same.
+ *
+ * list=B(1) A(2), result=empty
+ *
+ * Now it is B's turn. We mark its parent, C, reachable from B's side,
+ * and push it to the list:
+ *
+ * list=C(3) A(2), result=empty
+ *
+ * Now pop C and notice it has flags==3. It is placed on the result list,
+ * and the list now contains:
+ *
+ * list=A(2), result=C(3)
+ *
+ * We pop A and do the same.
+ *
+ * list=B(3), result=C(3)
+ *
+ * Next, we pop B and something very interesting happens. It has flags==3
+ * so it is also placed on the result list, and its parents are marked
+ * uninteresting, retroactively, and placed back on the list:
+ *
+ * list=C(7), result=C(7) B(3)
+ *
+ * Now, list does not have any interesting commit. So we find the newest
+ * commit from the result list that is not marked uninteresting. Which is
+ * commit B.
+ */
+
static struct commit *common_ancestor(struct commit *rev1, struct commit *rev2)
{
struct commit_list *list = NULL;
@@ -18,19 +98,18 @@ static struct commit *common_ancestor(struct commit *rev1, struct commit *rev2)
insert_by_date(rev1, &list);
insert_by_date(rev2, &list);
- while (list) {
+ while (interesting(list)) {
struct commit *commit = list->item;
struct commit_list *tmp = list, *parents;
- int flags = commit->object.flags & 3;
+ int flags = commit->object.flags & 7;
list = list->next;
free(tmp);
- switch (flags) {
- case 3:
+ if (flags == 3) {
insert_by_date(commit, &result);
- continue;
- case 0:
- die("git-merge-base: commit without either parent?");
+
+ /* Mark children of a found merge uninteresting */
+ flags |= UNINTERESTING;
}
parents = commit->parents;
while (parents) {
@@ -43,9 +122,7 @@ static struct commit *common_ancestor(struct commit *rev1, struct commit *rev2)
insert_by_date(p, &list);
}
}
- if (!result)
- return NULL;
- return result->item;
+ return interesting(result);
}
int main(int argc, char **argv)
diff --git a/pull.c b/pull.c
index 950d9f47bd..e7bf83bb03 100644
--- a/pull.c
+++ b/pull.c
@@ -98,12 +98,39 @@ static int process_tag(struct tag *tag)
static struct object_list *process_queue = NULL;
static struct object_list **process_queue_end = &process_queue;
-static int process(unsigned char *sha1, const char *type)
+static int process_object(struct object *obj)
{
- struct object *obj;
- if (has_sha1_file(sha1))
+ if (obj->type == commit_type) {
+ if (process_commit((struct commit *)obj))
+ return -1;
+ return 0;
+ }
+ if (obj->type == tree_type) {
+ if (process_tree((struct tree *)obj))
+ return -1;
+ return 0;
+ }
+ if (obj->type == blob_type) {
+ return 0;
+ }
+ if (obj->type == tag_type) {
+ if (process_tag((struct tag *)obj))
+ return -1;
return 0;
- obj = lookup_object_type(sha1, type);
+ }
+ return error("Unable to determine requirements "
+ "of type %s for %s",
+ obj->type, sha1_to_hex(obj->sha1));
+}
+
+static int process(unsigned char *sha1, const char *type)
+{
+ struct object *obj = lookup_object_type(sha1, type);
+ if (has_sha1_file(sha1)) {
+ parse_object(sha1);
+ /* We already have it, so we should scan it now. */
+ return process_object(obj);
+ }
if (object_list_contains(process_queue, obj))
return 0;
object_list_insert(obj, process_queue_end);
@@ -134,27 +161,8 @@ static int loop(void)
return -1;
if (!obj->type)
parse_object(obj->sha1);
- if (obj->type == commit_type) {
- if (process_commit((struct commit *)obj))
- return -1;
- continue;
- }
- if (obj->type == tree_type) {
- if (process_tree((struct tree *)obj))
- return -1;
- continue;
- }
- if (obj->type == blob_type) {
- continue;
- }
- if (obj->type == tag_type) {
- if (process_tag((struct tag *)obj))
- return -1;
- continue;
- }
- return error("Unable to determine requirements "
- "of type %s for %s",
- obj->type, sha1_to_hex(obj->sha1));
+ if (process_object(obj))
+ return -1;
}
return 0;
}
diff --git a/t/t1001-read-tree-m-2way.sh b/t/t1001-read-tree-m-2way.sh
index b3e6bd57d0..919f2b3109 100755
--- a/t/t1001-read-tree-m-2way.sh
+++ b/t/t1001-read-tree-m-2way.sh
@@ -100,7 +100,7 @@ test_expect_success \
git-checkout-cache -u -f -q -a &&
git-update-cache --add yomin &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >4.out || exit
+ git-ls-files --stage >4.out || return 1
diff -u M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean'
@@ -114,7 +114,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >5.out || exit
+ git-ls-files --stage >5.out || return 1
diff -u M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty'
@@ -215,7 +215,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >14.out || exit
+ git-ls-files --stage >14.out || return 1
diff -u M.out 14.out >14diff.out
compare_change 14diff.out expected &&
check_cache_at nitfol clean'
@@ -229,7 +229,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >15.out || exit
+ git-ls-files --stage >15.out || return 1
diff -u M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty'
diff --git a/t/t1002-read-tree-m-u-2way.sh b/t/t1002-read-tree-m-u-2way.sh
index 2f1ee79698..512d8977a2 100755
--- a/t/t1002-read-tree-m-u-2way.sh
+++ b/t/t1002-read-tree-m-u-2way.sh
@@ -73,7 +73,7 @@ test_expect_success \
'rm -f .git/index &&
git-update-cache --add yomin &&
git-read-tree -m -u $treeH $treeM &&
- git-ls-files --stage >4.out || exit
+ git-ls-files --stage >4.out || return 1
diff --unified=0 M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean &&
@@ -90,7 +90,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
git-read-tree -m -u $treeH $treeM &&
- git-ls-files --stage >5.out || exit
+ git-ls-files --stage >5.out || return 1
diff --unified=0 M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty &&
@@ -192,7 +192,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
git-read-tree -m -u $treeH $treeM &&
- git-ls-files --stage >14.out || exit
+ git-ls-files --stage >14.out || return 1
diff --unified=0 M.out 14.out >14diff.out
compare_change 14diff.out expected &&
sum bozbar frotz >actual14.sum &&
@@ -212,7 +212,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
git-read-tree -m -u $treeH $treeM &&
- git-ls-files --stage >15.out || exit
+ git-ls-files --stage >15.out || return 1
diff --unified=0 M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty &&
diff --git a/t/t1005-read-tree-m-2way-emu23.sh b/t/t1005-read-tree-m-2way-emu23.sh
index d80752ddd5..9227254fce 100755
--- a/t/t1005-read-tree-m-2way-emu23.sh
+++ b/t/t1005-read-tree-m-2way-emu23.sh
@@ -120,7 +120,7 @@ test_expect_success \
git-checkout-cache -u -f -q -a &&
git-update-cache --add yomin &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >4.out || exit
+ git-ls-files --stage >4.out || return 1
diff -u M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean'
@@ -136,7 +136,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >5.out || exit
+ git-ls-files --stage >5.out || return 1
diff -u M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty'
@@ -241,7 +241,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >14.out || exit
+ git-ls-files --stage >14.out || return 1
diff -u M.out 14.out >14diff.out
compare_change 14diff.out expected &&
check_cache_at nitfol clean'
@@ -255,7 +255,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >15.out || exit
+ git-ls-files --stage >15.out || return 1
diff -u M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty'
@@ -352,7 +352,7 @@ test_expect_success \
sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
git-update-cache --add bozbar &&
read_tree_twoway $treeH $treeM &&
- git-ls-files --stage >22.out || exit
+ git-ls-files --stage >22.out || return 1
diff -u M.out 22.out >22diff.out
compare_change 22diff.out &&
check_cache_at bozbar clean'
diff --git a/t/t2003-checkout-cache-mkdir.sh b/t/t2003-checkout-cache-mkdir.sh
index 6ec28179be..ed5e4ee516 100755
--- a/t/t2003-checkout-cache-mkdir.sh
+++ b/t/t2003-checkout-cache-mkdir.sh
@@ -93,3 +93,4 @@ test_expect_success \
test -d tmp-path1 &&
test -f tmp-path1/file1'
+test_done
diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh
index dbff346c0a..5beaaa3375 100755
--- a/t/t3001-ls-files-others-exclude.sh
+++ b/t/t3001-ls-files-others-exclude.sh
@@ -66,3 +66,5 @@ test_expect_success \
--exclude-from=.git/ignore \
>output &&
diff -u expect output'
+
+test_done
diff --git a/t/t4002-diff-basic.sh b/t/t4002-diff-basic.sh
index 03fc4b9830..2ec2961189 100755
--- a/t/t4002-diff-basic.sh
+++ b/t/t4002-diff-basic.sh
@@ -191,7 +191,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_A &&
git-checkout-cache -f -a &&
- git-read-tree -m $tree_O || (exit 1)
+ git-read-tree -m $tree_O || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-OA'
@@ -201,7 +201,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_B &&
git-checkout-cache -f -a &&
- git-read-tree -m $tree_O || (exit 1)
+ git-read-tree -m $tree_O || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-OB'
@@ -211,7 +211,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_B &&
git-checkout-cache -f -a &&
- git-read-tree -m $tree_A || (exit 1)
+ git-read-tree -m $tree_A || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-AB'
diff --git a/t/t4101-apply-nonl.sh b/t/t4101-apply-nonl.sh
index 380ef15a27..26b131d0d5 100755
--- a/t/t4101-apply-nonl.sh
+++ b/t/t4101-apply-nonl.sh
@@ -30,3 +30,5 @@ do
"git-apply <diff.$i-$j && diff frotz.$j frotz"
done
done
+
+test_done
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index b0b9329573..03951242d3 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -16,7 +16,7 @@ test_expect_success \
for i in a b c
do
dd if=/dev/zero bs=4k count=1 | tr "\\0" $i >$i &&
- git-update-cache --add $i || exit
+ git-update-cache --add $i || return 1
done &&
cat c >d && echo foo >>d && git-update-cache --add d &&
tree=`git-write-tree` &&
@@ -29,7 +29,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
- git-cat-file $t $object || exit 1
+ git-cat-file $t $object || return 1
done <obj-list
} >expect'
@@ -58,7 +58,7 @@ test_expect_success \
do
cmp $path ../.git/$path || {
echo $path differs.
- exit 1
+ return 1
}
done'
cd $TRASH
@@ -88,7 +88,7 @@ test_expect_success \
do
cmp $path ../.git/$path || {
echo $path differs.
- exit 1
+ return 1
}
done'
cd $TRASH
@@ -106,7 +106,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
- git-cat-file $t $object || exit 1
+ git-cat-file $t $object || return 1
done <obj-list
} >current &&
diff expect current'
@@ -122,7 +122,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
- git-cat-file $t $object || exit 1
+ git-cat-file $t $object || return 1
done <obj-list
} >current &&
diff expect current'
diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh
index 19a8f122c7..2c142dfeb0 100755
--- a/t/t5400-send-pack.sh
+++ b/t/t5400-send-pack.sh
@@ -18,7 +18,7 @@ test_expect_success setup '
do
sleep 1 &&
commit=$(echo "Commit #$i" | git-commit-tree $tree -p $parent) &&
- parent=$commit || exit
+ parent=$commit || return 1
done &&
echo "$commit" >.git/HEAD &&
git clone -l ./. victim &&
@@ -31,7 +31,7 @@ test_expect_success setup '
do
sleep 1 &&
commit=$(echo "Rebase #$i" | git-commit-tree $tree -p $parent) &&
- parent=$commit || exit
+ parent=$commit || return 1
done &&
echo "$commit" >.git/HEAD &&
echo Rebase &&
@@ -52,3 +52,5 @@ test_expect_success \
git-send-pack --force ./victim/.git/ master &&
cmp victim/.git/refs/heads/master .git/refs/heads/master
'
+
+test_done
diff --git a/t/test-lib.sh b/t/test-lib.sh
index f97f8eb395..1523d2ebbf 100755
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -5,8 +5,9 @@
# For repeatability, reset the environment to known value.
LANG=C
+PAGER=cat
TZ=UTC
-export LANG TZ
+export LANG PAGER TZ
unset AUTHOR_DATE
unset AUTHOR_EMAIL
unset AUTHOR_NAME
@@ -35,6 +36,7 @@ unset SHA1_FILE_DIRECTORY
error () {
echo "* error: $*"
+ trap - exit
exit 1
}
@@ -62,6 +64,7 @@ do
esac
done
+exec 5>&1
if test "$verbose" = "t"
then
exec 4>&2 3>&1
@@ -72,6 +75,8 @@ fi
test_failure=0
test_count=0
+trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
+
# You are not expected to call test_ok_ and test_failure_ directly, use
# the text_expect_* functions instead.
@@ -87,31 +92,39 @@ test_failure_ () {
say "FAIL $test_count: $1"
shift
echo "$@" | sed -e 's/^/ /'
- test "$immediate" == "" || exit 1
+ test "$immediate" = "" || { trap - exit; exit 1; }
}
test_debug () {
- test "$debug" == "" || eval "$1"
+ test "$debug" = "" || eval "$1"
+}
+
+test_run_ () {
+ eval >&3 2>&4 "$1"
+ eval_ret="$?"
+ return 0
}
test_expect_failure () {
- test "$#" == 2 ||
+ test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test-expect-failure"
say >&3 "expecting failure: $2"
- if eval >&3 2>&4 "$2"
+ test_run_ "$2"
+ if [ "$?" = 0 -a "$eval_ret" != 0 ]
then
- test_failure_ "$@"
- else
test_ok_ "$1"
+ else
+ test_failure_ "$@"
fi
}
test_expect_success () {
- test "$#" == 2 ||
+ test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test-expect-success"
say >&3 "expecting success: $2"
- if eval >&3 2>&4 "$2"
+ test_run_ "$2"
+ if [ "$?" = 0 -a "$eval_ret" = 0 ]
then
test_ok_ "$1"
else
@@ -120,6 +133,7 @@ test_expect_success () {
}
test_done () {
+ trap - exit
case "$test_failure" in
0)
# We could: