diff options
| author | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
| commit | 4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch) | |
| tree | c296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/amend.test | |
| download | relic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz | |
Diffstat (limited to 'test/amend.test')
| -rw-r--r-- | test/amend.test | 403 |
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 |
