summaryrefslogtreecommitdiff
path: root/test/amend.test
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/amend.test
downloadrelic-master.tar.gz
initial commitHEADmaster
Diffstat (limited to 'test/amend.test')
-rw-r--r--test/amend.test403
1 files changed, 403 insertions, 0 deletions
diff --git a/test/amend.test b/test/amend.test
new file mode 100644
index 0000000..61b2dbb
--- /dev/null
+++ b/test/amend.test
@@ -0,0 +1,403 @@
+#
+# Copyright (c) 2015 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program 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.
+#
+# Author contact information:
+# drh@hwaci.com
+# http://www.hwaci.com/drh/
+#
+############################################################################
+#
+# Tests for the "amend" command.
+#
+
+proc artifact_from_timeline {res var} {
+ upvar $var artid
+ regexp {(?x)[0-9]{2}(?::[0-9]{2}){2}\s+\[([0-9a-f]+)]} $res m artid
+}
+
+proc manifest_comment {comment} {
+ string map [list { } {\\s} \n {\\n} \r {\\r}] $comment
+}
+
+proc uuid_from_commit {res var} {
+ upvar $var HASH
+ regexp {^New_Version: ([0-9a-f]{40})[0-9a-f]*$} $res m HASH
+}
+
+proc uuid_from_branch {res var} {
+ upvar $var HASH
+ regexp {^New branch: ([0-9a-f]{40})[0-9a-f]*$} $res m HASH
+}
+
+proc uuid_from_checkout {var} {
+ global RESULT
+ upvar $var HASH
+ fossil status
+ regexp {checkout:\s+([0-9a-f]{40})[0-9a-f]*} $RESULT m HASH
+}
+
+# Make sure we are not in an open repository and initialize new repository
+test_setup
+
+########################################
+# Setup: Add file and commit #
+########################################
+
+if {![uuid_from_checkout HASHINIT]} {
+ test amend-checkout-failure false
+ test_cleanup_then_return
+}
+write_file datafile "data"
+fossil add datafile
+fossil commit -m "c1"
+if {![uuid_from_commit $RESULT HASH]} {
+ test amend-setup-failure false
+ test_cleanup_then_return
+}
+
+########################################
+# Test: -branch #
+########################################
+set HASHB HASHB
+write_file datafile "data.file"
+fossil commit -m "c2"
+if {![uuid_from_commit $RESULT HASHB]} {
+ test amend-branch.setup false
+}
+fossil amend $HASHB -branch amended-branch
+test amend-branch-1.1 {[regexp {tags:\s+amended-branch} $RESULT]}
+fossil branch ls
+test amend-branch-1.2 {[string first "* amended-branch" $RESULT] != -1}
+fossil tag list
+test amend-branch-1.3 {[string first amended-branch $RESULT] != -1}
+fossil tag list --raw $HASHB
+test amend-branch-1.4 {[string first "branch=amended-branch" $RESULT] != -1}
+test amend-branch-1.5 {[string first "sym-amended-branch" $RESULT] != -1}
+fossil timeline -n 1
+test amend-branch-1.6 {[string match {*Move*to*branch*amended-branch*} $RESULT]}
+
+########################################
+# Test: -bgcolor #
+########################################
+set tc 0
+foreach {color result} {
+ 0 0
+ a a
+ abcdef #abcdef
+ abc123 #abc123
+ 123efg 123efg
+ abcdefg abcdefg
+ abcdeg abcdeg
+ blue blue
+ acf #acf
+ 123 #123
+ #1234 #1234
+ 1234 1234
+ 123456 #123456
+} {
+ incr tc
+ fossil amend $HASH -bgcolor $color
+ test amend-bgcolor-1.$tc.a {[string match "*hash:*$HASH*" $RESULT]}
+ fossil tag list --raw $HASH
+ test amend-bgcolor-1.$tc.b {[string first "bgcolor=$result" $RESULT] != -1}
+ fossil timeline -n 1
+ test amend-bgcolor-1.$tc.c {
+ [string match "*Change*background*color*to*\"$result\"*" $RESULT]
+ }
+ if {[artifact_from_timeline $RESULT artid]} {
+ fossil artifact $artid
+ test amend-bgcolor-1.$tc.d {
+ [string match "*T +bgcolor $HASH* $result*" $RESULT]
+ }
+ } else {
+ if {$VERBOSE} { protOut "No artifact found in timeline output" }
+ test amend-bgcolor-1.$tc.d false
+ }
+}
+fossil amend $HASH -bgcolor {}
+test amend-bgcolor-2.1 {[string match "*hash:*$HASH*" $RESULT]}
+fossil tag list --raw $HASH
+test amend-bgcolor-2.2 {
+ [string first "bgcolor=" $RESULT] == -1 &&
+ [string first "bgcolor" $RESULT] != -1
+}
+fossil timeline -n 1
+test amend-bgcolor-2.3 {[string match "*Cancel*background*color.*" $RESULT]}
+if {[artifact_from_timeline $RESULT artid]} {
+ fossil artifact $artid
+ test amend-bgcolor-2.4 {[string match "*T -bgcolor $HASH*" $RESULT]}
+} else {
+ if {$VERBOSE} { protOut "No artifact found in timeline output" }
+ test amend-bgcolor-2.4 false
+}
+
+########################################
+# Test: -branchcolor #
+########################################
+set HASH2 HASH2
+fossil branch new brclr $HASH
+if {![uuid_from_branch $RESULT HASH2]} {
+ test amend-branchcolor.setup false
+}
+fossil update $HASH2
+fossil amend $HASH2 -branchcolor yellow
+test amend-branchcolor-1.1 {[string match "*hash:*$HASH2*" $RESULT]}
+fossil tag ls --raw $HASH2
+test amend-branchcolor-1.2 {[string first "bgcolor=yellow" $RESULT] != -1}
+fossil timeline -n 1
+test amend-branchcolor-1.3 {
+ [string match {*Change*branch*background*color*to*"yellow".*} $RESULT]
+}
+if {[regexp {(?x)[0-9]{2}(?::[0-9]{2}){2}\s+\[([0-9a-f]+)]} $RESULT m artid]} {
+ fossil artifact $artid
+ test amend-branchcolor-1.4 {
+ [string match "*T \*bgcolor $HASH2* yellow*" $RESULT]
+ }
+} else {
+ if {$VERBOSE} { protOut "No artifact found in timeline output" }
+ test amend-branchcolor-1.4 false
+}
+
+set HASHN HASHN
+write_file datafile "brclr"
+fossil commit -m "brclr"
+if {![uuid_from_commit $RESULT HASHN]} {
+ test amend-branchcolor-propagating.setup false
+}
+write_file datafile "bc1"
+fossil commit -m "mc1"
+write_file datafile "bc2"
+fossil commit -m "mc2"
+fossil amend $HASHN -branchcolor deadbe
+test amend-branchcolor-2.1 {[string match "*hash:*$HASHN*" $RESULT]}
+fossil tag ls --raw current
+test amend-branchcolor-2.2 {[string first "bgcolor=#deadbe" $RESULT] != -1}
+fossil timeline -n 1
+test amend-branchcolor-2.3 {
+ [string match {*Change*branch*background*color*to*"#deadbe".*} $RESULT]
+}
+
+########################################
+# Test: -author #
+########################################
+fossil amend $HASH -author author-test
+test amend-author-1.1 {[string match {*comment:*(user:*author-test)*} $RESULT]}
+fossil tag ls --raw $HASH
+test amend-author-1.2 {[string first "user=author-test" $RESULT] != -1}
+fossil timeline -n 1
+test amend-author-1.3 {[string match {*Change*user*to*"author-test".*} $RESULT]}
+
+########################################
+# Test: -date #
+########################################
+set timestamp [clock scan yesterday]
+set date [clock format $timestamp -format "%Y-%m-%d" -gmt 1]
+set time [clock format $timestamp -format "%H:%M:%S" -gmt 1]
+set datetime "$date $time"
+fossil amend $HASHINIT -date $datetime
+test amend-date-1.1 {[string match "*hash:*$HASHINIT*$datetime*" $RESULT]}
+fossil tag ls --raw $HASHINIT
+test amend-date-1.2 {[string first "date=$datetime" $RESULT] != -1}
+fossil timeline -n 1
+test amend-date-1.3 {[string match "*Timestamp*$date*$time*" $RESULT]}
+set badformats {
+ "%+"
+ "%Y-%m-%d %H:%M%:%S %Z"
+ "%d/%m/%Y %H:%M%:%S %Z"
+ "%d/%m/%Y %H:%M%:%S"
+ "%d/%m/%Y"
+}
+set sc 0
+foreach badformat $badformats {
+ incr sc
+ set datetime [clock format $timestamp -format $badformat -gmt 1]
+ fossil amend $HASHINIT -date $datetime -expectError
+ test amend-date-2.$sc {[string first "YYYY-MM-DD HH:MM:SS" $RESULT] != -1}
+}
+
+########################################
+# Test: -hide #
+########################################
+set HASHH HASHH
+fossil revert
+fossil update trunk
+fossil branch new tohide current
+if {![uuid_from_branch $RESULT HASHH]} {
+ test amend-hide-setup false
+}
+fossil amend $HASHH -hide
+test amend-hide-1.1 {[string match "*hash:*$HASHH*" $RESULT]}
+fossil tag ls --raw $HASHH
+test amend-hide-1.2 {[string first "hidden" $RESULT] != -1}
+fossil timeline -n 1
+test amend-hide-1.3 {[string match {*Add*propagating*"hidden".*} $RESULT]}
+
+########################################
+# Test: -close #
+########################################
+set HASHC HASHC
+fossil branch new cllf $HASH
+if {![uuid_from_branch $RESULT HASHC]} {
+ test amend-close.setup false
+}
+fossil update $HASHC
+fossil amend $HASHC -close
+test amend-close-1.1.a {[string match "*hash:*$HASHC*" $RESULT]}
+test amend-close-1.1.b {
+ [string match "*comment:*Create*new*branch*named*\"cllf\"*" $RESULT]
+}
+fossil tag ls --raw $HASHC
+test amend-close-1.2 {[string first "closed" $RESULT] != -1}
+fossil timeline -n 1
+test amend-close-1.3 {[string match {*Mark*"Closed".*} $RESULT]}
+write_file datafile "cllf"
+fossil commit -m "should fail" -expectError
+test amend-close-2 {[string first "closed leaf" $RESULT] != -1}
+
+set HASH3 HASH3
+fossil revert
+fossil update trunk
+write_file datafile "cb"
+fossil commit -m "closed-branch" --branch "closebranch"
+if {![uuid_from_commit $RESULT HASH3]} {
+ test amend-close-3.setup false
+}
+write_file datafile "b1"
+fossil commit -m "m1"
+write_file datafile "b2"
+fossil commit -m "m2"
+fossil amend $HASH3 --close
+test amend-close-3.1 {[string match "*hash:*$HASH3*" $RESULT]}
+fossil tag ls --raw current
+test amend-close-3.2 {[string first "closed" $RESULT] != -1}
+fossil timeline -n 1
+test amend-close-3.3 {
+ [string match "*Add*propagating*\"closed\".*" $RESULT]
+}
+write_file datafile "changed"
+fossil commit -m "should fail" -expectError
+test amend-close-3.4 {[string first "closed leaf" $RESULT] != -1}
+
+########################################
+# Test: -tag/-cancel #
+########################################
+set tagtests {
+ tagged tagged
+ {000000 lower Upper alpha 0alpha} {000000 0alpha Upper alpha lower}
+}
+set tc 0
+foreach {tagt result} $tagtests {
+ incr tc
+ set tags {}
+ set cancels {}
+ set t1exp [join $result ", "]
+ set t2exp "*"
+ set t3exp "*"
+ set t5exp "*"
+ foreach tag $tagt {
+ lappend tags -tag $tag
+ lappend cancels -cancel $tag
+ }
+ foreach res $result {
+ append t3exp "Add*tag*\"$res\".*"
+ append t5exp "Cancel*tag*\"$res\".*"
+ }
+ foreach res [lsort -nocase $result] {
+ append t2exp "sym-$res*"
+ }
+ eval fossil amend $HASH $tags
+ test amend-tag-$tc.1 {[string match "*hash:*$HASH*tags:*$t1exp*" $RESULT]}
+ fossil tag ls --raw $HASH
+ test amend-tag-$tc.2 {[string match $t2exp $RESULT]}
+ fossil timeline -n 1
+ test amend-tag-$tc.3 {[string match $t3exp $RESULT]}
+ eval fossil amend $HASH $cancels
+ test amend-tag-$tc.4 {![string match "*tags:*$t1exp*" $RESULT]}
+ fossil timeline -n 1
+ test amend-tag-$tc.5 {[string match $t5exp $RESULT]}
+}
+
+########################################
+# Test: -comment #
+########################################
+proc prep-test {comment content} {
+ global HASH RESULT
+
+ fossil revert
+ fossil update trunk
+ write_file datafile $comment
+ fossil commit -m $content
+ if {![uuid_from_commit $RESULT HASH]} {
+ set HASH ""
+ }
+}
+
+proc test-comment {name HASH comment} {
+ global VERBOSE RESULT
+
+ test amend-comment-$name.1 {
+ [string match "*hash:*$HASH*comment:*$comment*" $RESULT]
+ }
+ fossil timeline -n 1
+ if {[artifact_from_timeline $RESULT artid]} {
+ fossil artifact $artid
+ test amend-comment-$name.2 {
+ [string match "*T +comment $HASH* *[manifest_comment $comment]*" $RESULT]
+ }
+ } else {
+ if {$VERBOSE} { protOut "No artifact found in timeline output: $RESULT" }
+ test amend-comment-$name.2 false
+ }
+ fossil timeline -n 1
+ test amend-comment-$name.3 {
+ [string match "*[short_uuid $HASH]*Edit*check-in*comment.*" $RESULT]
+ }
+ fossil info $HASH
+ test amend-comment-$name.4 {
+ [string match "*hash:*$HASH*comment:*$comment*" $RESULT]
+ }
+}
+
+prep-test "revision 1" "revision 1"
+fossil amend $HASH -comment "revised revision 1"
+test-comment 1 $HASH "revised revision 1"
+
+prep-test "revision 2" "revision 2"
+fossil amend $HASH -m "revised revision 2 with -m"
+test-comment 2 $HASH "revised revision 2 with -m"
+
+prep-test "revision 3" "revision 3"
+write_file commitmsg "revision 3 revised"
+fossil amend $HASH -message-file commitmsg
+test-comment 3 $HASH "revision 3 revised"
+
+prep-test "revision 4" "revision 4"
+write_file commitmsg "revision 4 revised with -M"
+fossil amend $HASH -M commitmsg
+test-comment 4 $HASH "revision 4 revised with -M"
+
+prep-test "final comment" "final content"
+if {[catch {exec which ed} result] == 0} {
+ fossil settings editor "ed -s"
+ set comment "interactive edited comment"
+ fossil_maybe_answer "a\n$comment\n.\nw\nq\n" amend $HASH --edit-comment
+ test-comment 5 $HASH $comment
+}
+
+########################################
+# Test: NULL hash #
+########################################
+fossil amend {} -close -expectError
+test amend-null-uuid {$CODE && [string first "no such check-in" $RESULT] != -1}
+
+###############################################################################
+
+test_cleanup