diff options
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | debian/control | 10 | ||||
-rw-r--r-- | debian/copyright | 25 | ||||
-rw-r--r-- | debian/docs | 2 | ||||
-rw-r--r-- | debian/git-core.files | 1 | ||||
-rw-r--r-- | debian/git-core.install | 1 | ||||
-rw-r--r-- | debian/git-tk.files | 1 | ||||
-rwxr-xr-x | debian/rules | 4 | ||||
-rwxr-xr-x | gitk | 47 | ||||
-rw-r--r-- | merge-base.c | 97 | ||||
-rw-r--r-- | pull.c | 58 | ||||
-rwxr-xr-x | t/t1001-read-tree-m-2way.sh | 8 | ||||
-rwxr-xr-x | t/t1002-read-tree-m-u-2way.sh | 8 | ||||
-rwxr-xr-x | t/t1005-read-tree-m-2way-emu23.sh | 10 | ||||
-rwxr-xr-x | t/t2003-checkout-cache-mkdir.sh | 1 | ||||
-rwxr-xr-x | t/t3001-ls-files-others-exclude.sh | 2 | ||||
-rwxr-xr-x | t/t4002-diff-basic.sh | 6 | ||||
-rwxr-xr-x | t/t4101-apply-nonl.sh | 2 | ||||
-rwxr-xr-x | t/t5300-pack-object.sh | 12 | ||||
-rwxr-xr-x | t/t5400-send-pack.sh | 6 | ||||
-rwxr-xr-x | t/test-lib.sh | 32 |
22 files changed, 245 insertions, 99 deletions
@@ -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 dd86f82d8..28cfb0f84 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 8bdbd731f..53b87f44a 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 32b7e9c54..ea61effc4 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 a252d0f2c..e845566c0 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 000000000..74e4e23b0 --- /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 72e8ffc0d..000000000 --- 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 000000000..3801e7564 --- /dev/null +++ b/debian/git-tk.files @@ -0,0 +1 @@ +/usr/bin/gitk diff --git a/debian/rules b/debian/rules index 2c575ffa1..921aeecfb 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 @@ -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 591956666..923256c82 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) @@ -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 b3e6bd57d..919f2b310 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 2f1ee7969..512d8977a 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 d80752ddd..9227254fc 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 6ec28179b..ed5e4ee51 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 dbff346c0..5beaaa337 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 03fc4b983..2ec296118 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 380ef15a2..26b131d0d 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 b0b932957..03951242d 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 19a8f122c..2c142dfeb 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 f97f8eb39..1523d2ebb 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: |