|
1
|
# |
|
2
|
# Copyright (c) 2016 D. Richard Hipp |
|
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
|
# Test manifest setting |
|
19
|
# |
|
20
|
|
|
21
|
proc file_contains {fname match} { |
|
22
|
set fp [open $fname r] |
|
23
|
set contents [read $fp] |
|
24
|
close $fp |
|
25
|
set lines [split $contents "\n"] |
|
26
|
foreach line $lines { |
|
27
|
if {[regexp $match $line]} { |
|
28
|
return 1 |
|
29
|
} |
|
30
|
} |
|
31
|
return 0 |
|
32
|
} |
|
33
|
|
|
34
|
# We need SHA1 to effectively test the manifest files produced by |
|
35
|
# fossil. It looks like the one from tcllib is exactly what we need. |
|
36
|
# On ActiveTcl, add it with teacup. On other platforms, YMMV. |
|
37
|
# teacup install sha1 |
|
38
|
if {[catch {package require sha1}] != 0} { |
|
39
|
puts "The \"sha1\" package is not available." |
|
40
|
test_cleanup_then_return |
|
41
|
} |
|
42
|
|
|
43
|
# We need a repository, so let it have one. |
|
44
|
test_setup |
|
45
|
|
|
46
|
#### Verify classic behavior of the manifest setting |
|
47
|
|
|
48
|
# Setting is off by default, and there are no extra files. |
|
49
|
fossil settings manifest |
|
50
|
test "set-manifest-1" {[regexp {^manifest *$} $RESULT]} |
|
51
|
set filelist [lsort [glob -nocomplain manifest*]] |
|
52
|
test "set-manifest-1-n" {[llength $filelist] == 0} |
|
53
|
|
|
54
|
# Classic behavior: TRUE value creates manifest and manifest.uuid |
|
55
|
set truths [list true on 1] |
|
56
|
foreach v $truths { |
|
57
|
fossil settings manifest $v |
|
58
|
test "set-manifest-2-$v" {$RESULT eq ""} |
|
59
|
fossil settings manifest |
|
60
|
test "set-manifest-2-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} |
|
61
|
set filelist [lsort [glob manifest*]] |
|
62
|
test "set-manifest-2-$v-n" {[llength $filelist] == 2} |
|
63
|
foreach f $filelist { |
|
64
|
test "set-manifest-2-$v-f-$f" {[file isfile $f]} |
|
65
|
} |
|
66
|
} |
|
67
|
|
|
68
|
# ... and manifest.uuid is the checkout's hash |
|
69
|
fossil info |
|
70
|
regexp {(?m)^checkout:\s+([0-9a-f]{40,64})\s.*$} $RESULT ckoutline ckid |
|
71
|
set uuid [string trim [read_file "manifest.uuid"]] |
|
72
|
test "set-manifest-2-uuid" {[same_uuid $ckid $uuid]} |
|
73
|
|
|
74
|
|
|
75
|
# ... which is also the SHA1 of the file "manifest" before it was |
|
76
|
# sterilized by appending an extra line when writing the file. The |
|
77
|
# extra text begins with # and is a full line, so we'll just strip |
|
78
|
# it with a brute-force substitution. This probably has the right |
|
79
|
# effect even if the checkin was PGP-signed, but we don't have that |
|
80
|
# setting turned on for this manifest in any case. |
|
81
|
#regsub {(?m)^#.*\n} [read_file "manifest"] "" manifest |
|
82
|
#set muuid [::sha1::sha1 $manifest] |
|
83
|
#test "set-manifest-2-manifest" {[same_uuid $muuid $uuid]} |
|
84
|
|
|
85
|
|
|
86
|
# Classic behavior: FALSE value removes manifest and manifest.uuid |
|
87
|
set falses [list false off 0] |
|
88
|
foreach v $falses { |
|
89
|
fossil settings manifest $v |
|
90
|
test "set-manifest-3-$v" {$RESULT eq ""} |
|
91
|
fossil settings manifest |
|
92
|
test "set-manifest-3-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} |
|
93
|
set filelist [lsort [glob -nocomplain manifest*]] |
|
94
|
test "set-manifest-3-$v-n" {[llength $filelist] == 0} |
|
95
|
} |
|
96
|
|
|
97
|
|
|
98
|
# Classic behavior: unset removes manifest and manifest.uuid |
|
99
|
fossil unset manifest |
|
100
|
test "set-manifest-4" {$RESULT eq ""} |
|
101
|
fossil settings manifest |
|
102
|
test "set-manifest-4-a" {[regexp {^manifest *$} $RESULT]} |
|
103
|
set filelist [lsort [glob -nocomplain manifest*]] |
|
104
|
test "set-manifest-4-n" {[llength $filelist] == 0} |
|
105
|
|
|
106
|
|
|
107
|
##### Tags Manifest feature extends the manifest setting |
|
108
|
|
|
109
|
# Manifest Tags: use letters r, u, and t to select each of manifest, |
|
110
|
# manifest.uuid, and manifest.tags files. |
|
111
|
set truths [list r u t ru ut rt rut] |
|
112
|
foreach v $truths { |
|
113
|
fossil settings manifest $v |
|
114
|
test "set-manifest-5-$v" {$RESULT eq ""} |
|
115
|
fossil settings manifest |
|
116
|
test "set-manifest-5-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} |
|
117
|
set filelist [lsort [glob manifest*]] |
|
118
|
test "set-manifest-5-$v-n" {[llength $filelist] == [string length $v]} |
|
119
|
foreach f $filelist { |
|
120
|
test "set-manifest-5-$v-f-$f" {[file isfile $f]} |
|
121
|
} |
|
122
|
} |
|
123
|
|
|
124
|
# Quick check for tags applied in trunk |
|
125
|
test_file_contents "set-manifest-6" "manifest.tags" "branch trunk\ntag trunk\n" |
|
126
|
|
|
127
|
|
|
128
|
##### Test manifest.tags file content updates after commits |
|
129
|
|
|
130
|
# Explicitly set manifest.tags mode |
|
131
|
fossil set manifest t |
|
132
|
test "set-manifest-7-1" {[file isfile manifest.tags]} |
|
133
|
|
|
134
|
# Add a tag and make sure it appears in manifest.tags |
|
135
|
fossil tag add manifest-7-tag-1 tip |
|
136
|
test "set-manifest-7-2" {[file_contains "manifest.tags" "^tag manifest-7-tag-1$"]} |
|
137
|
|
|
138
|
# Add a file and make sure tag has disappeared from manifest.tags |
|
139
|
write_file file1 "file1 contents" |
|
140
|
fossil add file1 |
|
141
|
fossil commit -m "Added file1." |
|
142
|
test "set-manifest-7-3" {![file_contains "manifest.tags" "^tag manifest-7-tag-1$"]} |
|
143
|
|
|
144
|
# Add new tag and check that it is in manifest.tags |
|
145
|
fossil tag add manifest-7-tag-2 tip |
|
146
|
test "set-manifest-7-4" {[file_contains "manifest.tags" "^tag manifest-7-tag-2$"]} |
|
147
|
|
|
148
|
|
|
149
|
##### Tags manifest branch= updates |
|
150
|
|
|
151
|
# Add file, create new branch on commit and check that |
|
152
|
# manifest.tags has been updated appropriately |
|
153
|
write_file file3 "file3 contents" |
|
154
|
fossil add file3 |
|
155
|
fossil commit -m "Added file3." --branch manifest-8-branch |
|
156
|
test "set-manifest-8" {[file_contains "manifest.tags" "^branch manifest-8-branch$"]} |
|
157
|
|
|
158
|
|
|
159
|
test_cleanup |
|
160
|
|