Fossil SCM

fossil-scm / test / update.test
Blame History Raw 248 lines
1
#
2
# Copyright (c) 2024 Preben Guldnerg <[email protected]>
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the Simplified BSD License (also
6
# known as the "2-Clause License" or "FreeBSD License".)
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but without any warranty; without even the implied warranty of
10
# merchantability or fitness for a particular purpose.
11
#
12
# Author contact information:
13
# [email protected]
14
# http://www.hwaci.com/drh/
15
#
16
############################################################################
17
#
18
# Tests for the "update" command.
19
#
20
21
# Track number of tests we have set up in test_update_setup. This helps ensure
22
# that generated files are ordered in `fossil update --verbose` mode.
23
set UPDATE_TEST 0
24
25
proc test_update_setup {desc} {
26
global UPDATE_TEST
27
incr UPDATE_TEST
28
fossil revert
29
fossil update
30
return [format "test-%02u-%s.txt" $UPDATE_TEST $desc]
31
}
32
33
# The output is in file name order, so massage $RESULT to remove initial UNCHANGED
34
# files. Only do this if we have the expected branch information.
35
proc test_update {testname message changes {fossil_args ""}} {
36
fossil update --verbose {*}$fossil_args
37
if { [regsub {\n-{79}\nupdated-from: [0-9a-z]{40} .*} $::RESULT {} test_result ] } {
38
regsub {^(?:UNCHANGED [-a-z0-9.]+\n)*} $test_result {} test_result
39
} else {
40
set test_result $::RESULT
41
}
42
test "update-message-$testname" {$message == $test_result}
43
fossil changes
44
test "update-changes-$testname" {$changes == $::RESULT}
45
}
46
47
# Use a sequence number for file content that is not important for the test.
48
set UPDATE_SEQ_NO 0
49
proc write_seq_to_file {fname} {
50
global UPDATE_SEQ_NO
51
incr UPDATE_SEQ_NO
52
write_file $fname "$UPDATE_SEQ_NO\n"
53
}
54
55
# Make sure we are not in an open repository and initialize new repository
56
test_setup
57
58
###############################################################################
59
60
fossil update --verbose
61
test update-already-up-to-date {
62
[regexp {^-{79}\ncheckout: .*\nchanges: +None. Already up-to-date.$} $RESULT]
63
}
64
65
# Remaining tests are carried out in the order update_cmd() performs checks.
66
#
67
# Common approach for tests below:
68
# 1. Set the testname
69
# 2. Set the file name, done by calling update_setup
70
# 3. Set message and changes, the expected message message and subsequent changes
71
# 3. Optionally set up and commit a common base for the next steps
72
# 4. Commit a change to the repository (new tip)
73
# 5. Update to the previous version
74
# 6. Make changes
75
# 7. Call test_update to attempt and update to tip
76
77
78
set testname "conflict-standard"
79
set fname [test_update_setup $testname]
80
set message "CONFLICT $fname"
81
set changes "EDITED $fname"
82
write_seq_to_file $fname
83
fossil add $fname
84
fossil commit -m "Add $fname"
85
fossil up previous
86
write_seq_to_file $fname
87
fossil add $fname
88
test_update $testname $message $changes -expectError
89
90
set testname "add-overwrites"
91
set fname [test_update_setup $testname]
92
set message "ADD $fname - overwrites an unmanaged file, original copy backed up locally"
93
set changes ""
94
write_seq_to_file $fname
95
fossil add $fname
96
fossil commit -m "Add $fname"
97
fossil up previous
98
write_seq_to_file $fname
99
test_update $testname $message $changes -expectError
100
101
set testname "add-standard"
102
set fname [test_update_setup $testname]
103
set message "ADD $fname"
104
set changes ""
105
write_seq_to_file $fname
106
fossil add $fname
107
fossil commit -m "Add $fname"
108
fossil up previous
109
test_update $testname $message $changes
110
111
set testname "update-change"
112
set fname [test_update_setup $testname]
113
set message "UPDATE $fname - change to unmanaged file"
114
set changes "DELETED $fname"
115
write_seq_to_file $fname
116
fossil add $fname
117
fossil commit -m "Add $fname"
118
write_seq_to_file $fname
119
fossil commit -m "Update $fname"
120
fossil up previous
121
fossil rm --hard $fname
122
test_update $testname $message $changes
123
124
set testname "update-standard"
125
set fname [test_update_setup $testname]
126
set message "UPDATE $fname"
127
set changes ""
128
write_seq_to_file $fname
129
fossil add $fname
130
fossil commit -m "Add $fname"
131
write_seq_to_file $fname
132
fossil commit -m "Update $testname"
133
fossil up previous
134
test_update $testname $message $changes
135
136
set testname "update-missing"
137
set fname [test_update_setup $testname]
138
set message "UPDATE $fname"
139
set changes ""
140
write_seq_to_file $fname
141
fossil add $fname
142
fossil commit -m "Add $fname"
143
write_seq_to_file $fname
144
fossil commit -m "Update $fname"
145
fossil up previous
146
file delete $fname
147
test_update $testname $message $changes
148
149
set testname "conflict-deleted"
150
set fname [test_update_setup $testname]
151
set message "CONFLICT $fname - edited locally but deleted by update"
152
set changes ""
153
write_seq_to_file $fname
154
fossil add $fname
155
fossil commit -m "Add $fname"
156
fossil rm --hard $fname
157
fossil commit -m "Remove $fname"
158
fossil up previous
159
file delete $fname
160
test_update $testname $message $changes -expectError
161
162
set testname "remove"
163
set fname [test_update_setup $testname]
164
set message "REMOVE $fname"
165
set changes ""
166
write_seq_to_file $fname
167
fossil add $fname
168
fossil commit -m "Add $fname"
169
fossil rm --hard $fname
170
fossil commit -m "Remove $fname"
171
fossil up previous
172
test_update $testname $message $changes
173
174
set testname "merge-renamed"
175
set fname [test_update_setup $testname]
176
set message "MERGE $fname -> $fname.renamed"
177
set changes "EDITED $fname.renamed"
178
write_file $fname "center\n"
179
fossil add $fname
180
fossil commit -m "Add $fname"
181
write_file $fname "top\ncenter\n"
182
fossil mv --hard $fname "$fname.renamed"
183
fossil commit -m "Update and rename $fname"
184
fossil up previous
185
write_file $fname "center\nbelow\n"
186
test_update $testname $message $changes
187
188
set testname "merge-standard"
189
set fname [test_update_setup $testname]
190
set message "MERGE $fname"
191
set changes "EDITED $fname"
192
write_file $fname "center\n"
193
fossil add $fname
194
fossil commit -m "Add $fname"
195
write_file $fname "top\ncenter\n"
196
fossil commit -m "Update $fname"
197
fossil up previous
198
write_file $fname "center\nbelow\n"
199
test_update $testname $message $changes
200
201
# TODO: test for "Cannot merge symlink" would be platform dependent
202
203
set testname "merge-conflict"
204
set fname [test_update_setup $testname]
205
set message "MERGE $fname\n***** 1 merge conflicts in $fname"
206
set changes "CONFLICT $fname"
207
write_seq_to_file $fname
208
fossil add $fname
209
fossil commit -m "Add $fname"
210
write_seq_to_file $fname
211
fossil commit -m "Update $fname"
212
fossil up previous
213
write_seq_to_file $fname
214
test_update $testname $message $changes -expectError
215
216
# TODO: test for "Cannot merge binary file"?
217
218
set testname "edited"
219
set fname [test_update_setup $testname]
220
set message "EDITED $fname\nADD $fname.other"
221
set changes "EDITED $fname"
222
write_seq_to_file $fname
223
fossil add $fname
224
fossil commit -m "Add $fname"
225
write_seq_to_file "$fname.other"
226
fossil add $fname.other
227
fossil commit -m "Add $fname.other"
228
fossil up previous
229
write_seq_to_file $fname
230
test_update $testname $message $changes
231
232
set testname "unchanged"
233
set fname [test_update_setup $testname]
234
set message "ADD $fname\nUNCHANGED $fname.unchanged"
235
set changes ""
236
write_seq_to_file "$fname.unchanged"
237
fossil add "$fname.unchanged"
238
fossil commit -m "Add $fname.unchanged"
239
write_seq_to_file "$fname"
240
fossil add "$fname"
241
fossil commit -m "Add $fname"
242
fossil up previous
243
test_update $testname $message $changes
244
245
###############################################################################
246
247
test_cleanup
248

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button