chiark / gitweb /
stgit.el: Add "d" for a few diff commands, similar to git.el
[stgit] / t / t4100-publish.sh
CommitLineData
e58f264a
CM
1#!/bin/sh
2#
3# Copyright (c) 2009 Catalin Marinas
4#
5
6test_description='Exercise the publish command.
7
8Create/modify patches on the stack and publish them to a separate branch.'
9
10. ./test-lib.sh
11
12test_same_tree () {
13 stack_tree=$(git rev-parse master^{tree})
14 public_tree=$(git rev-parse master.public^{tree})
15 test "$stack_tree" = "$public_tree"
16}
17
18test_expect_success \
19 'Initialize the StGit repository' \
20 '
21 stg init
22 '
23
24test_expect_success \
25 'Create some patches' \
26 '
27 stg new p1 -m p1 &&
28 echo foo1 > foo1.txt &&
29 git add foo1.txt &&
30 stg refresh &&
31 stg new p2 -m p2 &&
32 echo foo2 > foo2.txt &&
33 git add foo2.txt &&
34 stg refresh &&
35 stg new p3 -m p3 &&
36 echo foo3 > foo3.txt &&
37 git add foo3.txt &&
38 stg refresh
39 '
40
41test_expect_success \
42 'Publish the stack for the first time' \
43 '
44 stg publish &&
45 test "$(stg id)" = "$(stg id master.public)"
46 '
47
48test_expect_success \
49 'Modify a patch and publish the changes' \
50 '
51 stg pop &&
52 echo foo2 >> foo2.txt &&
53 stg refresh &&
54 stg push &&
55 old_public=$(stg id master.public) &&
56 stg publish -m "p2 updated" &&
57 test_same_tree &&
58 new_public=$(stg id master.public) &&
59 test "$(git rev-list $old_public..$new_public | wc -l)" = "1"
60 '
61
62test_expect_success \
63 'Create new patches and publish them' \
64 '
65 stg new p4 -m p4 &&
66 echo foo4 > foo4.txt &&
67 git add foo4.txt &&
68 stg refresh &&
69 stg new p5 -m p5 &&
70 echo foo5 > foo5.txt &&
71 git add foo5.txt &&
72 stg refresh &&
73 stg new empty -m empty &&
74 old_public=$(stg id master.public) &&
75 stg publish -m "Ignored message" &&
76 test_same_tree &&
77 new_public=$(stg id master.public) &&
78 test "$(git rev-list $old_public..$new_public | wc -l)" = "2"
79 '
80
81test_expect_success \
82 'Rebase the current stack and publish a merge' \
83 '
84 stg pop -a &&
85 echo foo0 > foo0.txt &&
86 git add foo0.txt &&
87 git commit -m "foo0.txt added" &&
88 stg push -a &&
89 old_public=$(stg id master.public) &&
90 stg publish -m "Merge with base" &&
91 test_same_tree &&
92 new_public=$(stg id master.public) &&
93 test "$(git rev-list $old_public..$new_public | wc -l)" = "2" &&
94 test "$(git merge-base master.public master)" = "$(stg id {base})"
95 '
96
97test_expect_success \
98 'Re-publish without any changes' \
99 '
100 old_public=$(stg id master.public) &&
101 stg publish -m "Ignored message" &&
102 test_same_tree &&
103 new_public=$(stg id master.public) &&
104 test "$old_public" = "$new_public"
105 '
106
107test_expect_success \
108 'Reorder patches and publish the changes' \
109 '
110 stg float p5 p4 p3 p2 p1 &&
111 old_public=$(stg id master.public) &&
112 stg publish -m "Ignored message" &&
113 test_same_tree &&
114 new_public=$(stg id master.public) &&
115 test "$old_public" = "$new_public"
116 '
117
118test_expect_success \
119 'Pop a patch and publish the changes' \
120 '
121 stg pop p3 &&
122 old_public=$(stg id master.public) &&
123 stg publish -m "p3 removed" &&
124 test_same_tree &&
125 new_public=$(stg id master.public) &&
126 test "$(git rev-list $old_public..$new_public | wc -l)" = "1"
127 '
128
129test_done