]>
Commit | Line | Data |
---|---|---|
53de71f8 JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | ||
6 | test_description='Merge base computation. | |
7 | ' | |
8 | ||
9 | . ./test-lib.sh | |
10 | ||
5be60078 | 11 | T=$(git write-tree) |
53de71f8 JH |
12 | |
13 | M=1130000000 | |
14 | Z=+0000 | |
15 | ||
0e46e704 BD |
16 | GIT_COMMITTER_EMAIL=git@comm.iter.xz |
17 | GIT_COMMITTER_NAME='C O Mmiter' | |
18 | GIT_AUTHOR_NAME='A U Thor' | |
19 | GIT_AUTHOR_EMAIL=git@au.thor.xz | |
20 | export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL | |
53de71f8 JH |
21 | |
22 | doit() { | |
23 | OFFSET=$1; shift | |
24 | NAME=$1; shift | |
25 | PARENTS= | |
26 | for P | |
27 | do | |
28 | PARENTS="${PARENTS}-p $P " | |
29 | done | |
30 | GIT_COMMITTER_DATE="$(($M + $OFFSET)) $Z" | |
31 | GIT_AUTHOR_DATE=$GIT_COMMITTER_DATE | |
32 | export GIT_COMMITTER_DATE GIT_AUTHOR_DATE | |
5be60078 | 33 | commit=$(echo $NAME | git commit-tree $T $PARENTS) |
53de71f8 JH |
34 | echo $commit >.git/refs/tags/$NAME |
35 | echo $commit | |
36 | } | |
37 | ||
e3ae6bb9 SV |
38 | # E---D---C---B---A |
39 | # \'-_ \ \ | |
40 | # \ `---------G \ | |
41 | # \ \ | |
42 | # F----------------H | |
43 | ||
53de71f8 JH |
44 | # Setup... |
45 | E=$(doit 5 E) | |
46 | D=$(doit 4 D $E) | |
47 | F=$(doit 6 F $E) | |
48 | C=$(doit 3 C $D) | |
49 | B=$(doit 2 B $C) | |
50 | A=$(doit 1 A $B) | |
51 | G=$(doit 7 G $B $E) | |
52 | H=$(doit 8 H $A $F) | |
53 | ||
e3ae6bb9 | 54 | test_expect_success 'compute merge-base (single)' \ |
5be60078 JH |
55 | 'MB=$(git merge-base G H) && |
56 | expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"' | |
e3ae6bb9 SV |
57 | |
58 | test_expect_success 'compute merge-base (all)' \ | |
5be60078 JH |
59 | 'MB=$(git merge-base --all G H) && |
60 | expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"' | |
e3ae6bb9 SV |
61 | |
62 | test_expect_success 'compute merge-base with show-branch' \ | |
5be60078 JH |
63 | 'MB=$(git show-branch --merge-base G H) && |
64 | expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"' | |
e3ae6bb9 | 65 | |
cd6f207a LAS |
66 | # Setup for second test to demonstrate that relying on timestamps in a |
67 | # distributed SCM to provide a _consistent_ partial ordering of commits | |
68 | # leads to insanity. | |
69 | # | |
70 | # Relative | |
71 | # Structure timestamps | |
72 | # | |
73 | # PL PR +4 +4 | |
74 | # / \/ \ / \/ \ | |
75 | # L2 C2 R2 +3 -1 +3 | |
76 | # | | | | | | | |
77 | # L1 C1 R1 +2 -2 +2 | |
78 | # | | | | | | | |
79 | # L0 C0 R0 +1 -3 +1 | |
80 | # \ | / \ | / | |
81 | # S 0 | |
82 | # | |
83 | # The left and right chains of commits can be of any length and complexity as | |
84 | # long as all of the timestamps are greater than that of S. | |
85 | ||
86 | S=$(doit 0 S) | |
87 | ||
88 | C0=$(doit -3 C0 $S) | |
89 | C1=$(doit -2 C1 $C0) | |
90 | C2=$(doit -1 C2 $C1) | |
91 | ||
92 | L0=$(doit 1 L0 $S) | |
93 | L1=$(doit 2 L1 $L0) | |
94 | L2=$(doit 3 L2 $L1) | |
95 | ||
96 | R0=$(doit 1 R0 $S) | |
97 | R1=$(doit 2 R1 $R0) | |
98 | R2=$(doit 3 R2 $R1) | |
99 | ||
100 | PL=$(doit 4 PL $L2 $C2) | |
101 | PR=$(doit 4 PR $C2 $R2) | |
102 | ||
cd6f207a | 103 | test_expect_success 'compute merge-base (single)' \ |
5be60078 JH |
104 | 'MB=$(git merge-base PL PR) && |
105 | expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/C2"' | |
cd6f207a LAS |
106 | |
107 | test_expect_success 'compute merge-base (all)' \ | |
5be60078 JH |
108 | 'MB=$(git merge-base --all PL PR) && |
109 | expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/C2"' | |
cd6f207a | 110 | |
53de71f8 | 111 | test_done |