aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/common/prereq-cycle/extra/libbar-1.1.0+1.tar.gz (renamed from tests/rep-remove/extra/libbar-1.1.0+1.tar.gz)bin243 -> 243 bytes
-rw-r--r--tests/common/prereq-cycle/extra/repositories (renamed from tests/rep-remove/extra/repositories)0
-rw-r--r--tests/common/prereq-cycle/math/libbar-1.0.0.tar.gz (renamed from tests/rep-remove/math/libbar-1.0.0.tar.gz)bin241 -> 241 bytes
-rw-r--r--tests/common/prereq-cycle/math/repositories (renamed from tests/rep-remove/math/repositories)0
-rw-r--r--tests/common/prereq-cycle/stable/libfoo-1.0.0.tar.gz (renamed from tests/rep-remove/stable/libfoo-1.0.0.tar.gz)bin240 -> 240 bytes
-rw-r--r--tests/common/prereq-cycle/stable/repositories (renamed from tests/rep-remove/stable/repositories)0
-rw-r--r--tests/rep-fetch-git.test1
-rw-r--r--tests/rep-fetch.test262
l---------tests/rep-fetch/cycle1
-rw-r--r--tests/rep-fetch/no-cycle/extra/libbar-1.1.0+1.tar.gzbin0 -> 243 bytes
-rw-r--r--tests/rep-fetch/no-cycle/extra/repositories1
-rw-r--r--tests/rep-fetch/no-cycle/math/libbar-1.0.0.tar.gzbin0 -> 241 bytes
-rw-r--r--tests/rep-fetch/no-cycle/math/repositories1
-rw-r--r--tests/rep-fetch/no-cycle/stable/libfoo-1.0.0.tar.gzbin0 -> 240 bytes
-rw-r--r--tests/rep-fetch/no-cycle/stable/repositories3
-rw-r--r--tests/rep-remove.test70
l---------tests/rep-remove/extra1
l---------tests/rep-remove/math1
l---------tests/rep-remove/stable1
19 files changed, 317 insertions, 25 deletions
diff --git a/tests/rep-remove/extra/libbar-1.1.0+1.tar.gz b/tests/common/prereq-cycle/extra/libbar-1.1.0+1.tar.gz
index 890e9e2..890e9e2 100644
--- a/tests/rep-remove/extra/libbar-1.1.0+1.tar.gz
+++ b/tests/common/prereq-cycle/extra/libbar-1.1.0+1.tar.gz
Binary files differ
diff --git a/tests/rep-remove/extra/repositories b/tests/common/prereq-cycle/extra/repositories
index ecaa454..ecaa454 100644
--- a/tests/rep-remove/extra/repositories
+++ b/tests/common/prereq-cycle/extra/repositories
diff --git a/tests/rep-remove/math/libbar-1.0.0.tar.gz b/tests/common/prereq-cycle/math/libbar-1.0.0.tar.gz
index 97e6e32..97e6e32 100644
--- a/tests/rep-remove/math/libbar-1.0.0.tar.gz
+++ b/tests/common/prereq-cycle/math/libbar-1.0.0.tar.gz
Binary files differ
diff --git a/tests/rep-remove/math/repositories b/tests/common/prereq-cycle/math/repositories
index 14d6ce0..14d6ce0 100644
--- a/tests/rep-remove/math/repositories
+++ b/tests/common/prereq-cycle/math/repositories
diff --git a/tests/rep-remove/stable/libfoo-1.0.0.tar.gz b/tests/common/prereq-cycle/stable/libfoo-1.0.0.tar.gz
index 5e7fa17..5e7fa17 100644
--- a/tests/rep-remove/stable/libfoo-1.0.0.tar.gz
+++ b/tests/common/prereq-cycle/stable/libfoo-1.0.0.tar.gz
Binary files differ
diff --git a/tests/rep-remove/stable/repositories b/tests/common/prereq-cycle/stable/repositories
index b49d922..b49d922 100644
--- a/tests/rep-remove/stable/repositories
+++ b/tests/common/prereq-cycle/stable/repositories
diff --git a/tests/rep-fetch-git.test b/tests/rep-fetch-git.test
index 45badc3..0d512eb 100644
--- a/tests/rep-fetch-git.test
+++ b/tests/rep-fetch-git.test
@@ -6,7 +6,6 @@
# the final states. See tests/common/git/init script for more details.
#
-rep_add += -d cfg 2>!
test.cleanups += &cfg/.bpkg/repositories/*/***
+if ($git_protocol == 'local')
diff --git a/tests/rep-fetch.test b/tests/rep-fetch.test
index 499541f..b0d73bd 100644
--- a/tests/rep-fetch.test
+++ b/tests/rep-fetch.test
@@ -32,6 +32,28 @@
# | |-- libhello-1.0.0.tar.gz
# | `-- repositories
# |
+# |-- circle
+# | |-- extra -> stable (prerequisite)
+# | | |-- libbar-1.1.0+1.tar.gz
+# | | `-- repositories
+# | |-- math -> extra (prerequisite)
+# | | |-- libbar-1.0.0.tar.gz
+# | | `-- repositories
+# | `-- stable -> math (prerequisite)
+# | |-- libfoo-1.0.0.tar.gz
+# | `-- repositories
+# |
+# |-- no-circle
+# | |-- extra
+# | | |-- libbar-1.1.0+1.tar.gz
+# | | `-- repositories
+# | |-- math
+# | | |-- libbar-1.0.0.tar.gz
+# | | `-- repositories
+# | `-- stable -> extra (prerequisite)
+# | |-- libfoo-1.0.0.tar.gz
+# | `-- repositories
+# |
# `-- git/* (see rep-fetch-git.test)
# Prepare repositories used by tests if running in the local mode.
@@ -58,6 +80,13 @@
$rep_create $out/bar/testing &$out/bar/testing/packages
$rep_create $out/bar/unstable &$out/bar/unstable/packages
+ # Create 'cycle/*' repositories.
+ #
+ cp -r $src/cycle $out/cycle
+ $rep_create $out/cycle/extra &$out/cycle/extra/packages
+ $rep_create $out/cycle/math &$out/cycle/math/packages
+ $rep_create $out/cycle/stable &$out/cycle/stable/packages
+
# Create git repositories.
#
$git_extract $src/git/state0/libfoo.tar
@@ -71,6 +100,10 @@
$git_extract $src/git/state1/style-basic.tar &$out_git/state1/***
end
+rep_add += -d cfg 2>!
+rep_list += -d cfg --prerequisites --complements
+pkg_status += -d cfg
+
: no-repos
:
$clone_cfg;
@@ -84,8 +117,6 @@ $* 2>>/EOE != 0
{
test.options += --auth all
- rep_add += -d cfg 2>!
-
: hello
:
{
@@ -129,7 +160,7 @@ $* 2>>/EOE != 0
: both
:
{
- $clone_root_cfg && $rep_add $rep/hello && $rep_add $rep/bar/unstable;
+ $clone_root_cfg && $rep_add $rep/hello $rep/bar/unstable;
$* --trust-yes 2>>EOE &cfg/.bpkg/certificates/**;
fetching bpkg:build2.org/rep-fetch/bar/unstable
@@ -151,6 +182,139 @@ $* 2>>/EOE != 0
6 package(s) in 6 repository(s)
EOE
}
+
+ : location-args
+ :
+ {
+ $clone_root_cfg;
+
+ $* --trust-yes $rep/bar/unstable 2>>EOE;
+ added bpkg:build2.org/rep-fetch/bar/unstable
+ fetching bpkg:build2.org/rep-fetch/bar/unstable
+ fetching bpkg:build2.org/rep-fetch/foo/testing (prerequisite of bpkg:build2.org/rep-fetch/bar/unstable)
+ fetching bpkg:build2.org/rep-fetch/foo/stable (complements bpkg:build2.org/rep-fetch/foo/testing)
+ fetching bpkg:build2.org/rep-fetch/bar/testing (complements bpkg:build2.org/rep-fetch/bar/unstable)
+ fetching bpkg:build2.org/rep-fetch/bar/stable (complements bpkg:build2.org/rep-fetch/bar/testing)
+ 5 package(s) in 5 repository(s)
+ EOE
+
+ $* 'bpkg:build2.org/rep-fetch/bar/unstable' 2>>EOE;
+ fetching bpkg:build2.org/rep-fetch/bar/unstable
+ fetching bpkg:build2.org/rep-fetch/foo/testing (prerequisite of bpkg:build2.org/rep-fetch/bar/unstable)
+ fetching bpkg:build2.org/rep-fetch/foo/stable (complements bpkg:build2.org/rep-fetch/foo/testing)
+ fetching bpkg:build2.org/rep-fetch/bar/testing (complements bpkg:build2.org/rep-fetch/bar/unstable)
+ fetching bpkg:build2.org/rep-fetch/bar/stable (complements bpkg:build2.org/rep-fetch/bar/testing)
+ 5 package(s) in 5 repository(s)
+ EOE
+
+ $rep_list >>"EOO"
+ bpkg:build2.org/rep-fetch/bar/unstable ($rep/bar/unstable)
+ complement bpkg:build2.org/rep-fetch/bar/testing ($rep/bar/testing)
+ complement bpkg:build2.org/rep-fetch/bar/stable ($rep/bar/stable)
+ prerequisite bpkg:build2.org/rep-fetch/foo/stable ($rep/foo/stable)
+ prerequisite bpkg:build2.org/rep-fetch/foo/testing ($rep/foo/testing)
+ complement bpkg:build2.org/rep-fetch/foo/stable ($rep/foo/stable)
+ prerequisite bpkg:build2.org/rep-fetch/foo/testing ($rep/foo/testing)
+ complement bpkg:build2.org/rep-fetch/foo/stable ($rep/foo/stable)
+ EOO
+ }
+
+ : prerequisites-cycle
+ :
+ {
+ $clone_root_cfg;
+
+ $* --trust-yes $rep/cycle/stable 2>>EOE;
+ added bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/math (prerequisite of bpkg:build2.org/rep-fetch/cycle/stable)
+ fetching bpkg:build2.org/rep-fetch/cycle/extra (prerequisite of bpkg:build2.org/rep-fetch/cycle/math)
+ 3 package(s) in 3 repository(s)
+ EOE
+
+ $rep_list >>"EOO"
+ bpkg:build2.org/rep-fetch/cycle/stable ($rep/cycle/stable)
+ prerequisite bpkg:build2.org/rep-fetch/cycle/math ($rep/cycle/math)
+ prerequisite bpkg:build2.org/rep-fetch/cycle/extra ($rep/cycle/extra)
+ prerequisite bpkg:build2.org/rep-fetch/cycle/stable ($rep/cycle/stable)
+ EOO
+ }
+
+ : unreferenced-prerequisite
+ :
+ {
+ +$clone_root_cfg
+
+ # Create the no-cycle repository as the new state of the cycle repository.
+ # The cycle dependency is now broken (extra/ doesn't depend on stable/
+ # anymore) and the extra/ prerequisite is moved from math/ to stable/.
+ #
+ nc_rep = [dir_path] $~/pkg/1/build2.org/rep-fetch/cycle/
+ +mkdir -p $path.directory($nc_rep)
+ +cp -r $src/no-cycle "$nc_rep" # Strip trailing slash.
+
+ +$rep_create $nc_rep/extra 2>! &$nc_rep/extra/packages
+ +$rep_create $nc_rep/math 2>! &$nc_rep/math/packages
+ +$rep_create $nc_rep/stable 2>! &$nc_rep/stable/packages
+
+ math_rep = $nc_rep/math
+ stable_rep = $nc_rep/stable
+
+ : remove
+ :
+ {
+ $clone_cfg;
+
+ $* --trust-yes $rep/cycle/stable 2>>EOE;
+ added bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/math (prerequisite of bpkg:build2.org/rep-fetch/cycle/stable)
+ fetching bpkg:build2.org/rep-fetch/cycle/extra (prerequisite of bpkg:build2.org/rep-fetch/cycle/math)
+ 3 package(s) in 3 repository(s)
+ EOE
+
+ $* --trust-yes $stable_rep 2>>EOE;
+ updated bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/extra (prerequisite of bpkg:build2.org/rep-fetch/cycle/stable)
+ 2 package(s) in 2 repository(s)
+ EOE
+
+ $rep_list >>"EOO"
+ bpkg:build2.org/rep-fetch/cycle/stable ($nc_rep/stable)
+ prerequisite bpkg:build2.org/rep-fetch/cycle/extra ($nc_rep/extra)
+ EOO
+ }
+
+ : no-remove
+ :
+ {
+ $clone_cfg;
+
+ $* --trust-yes $rep/cycle/stable 2>>EOE;
+ added bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/math (prerequisite of bpkg:build2.org/rep-fetch/cycle/stable)
+ fetching bpkg:build2.org/rep-fetch/cycle/extra (prerequisite of bpkg:build2.org/rep-fetch/cycle/math)
+ 3 package(s) in 3 repository(s)
+ EOE
+
+ $* --trust-yes $math_rep $stable_rep 2>>EOE;
+ added bpkg:build2.org/rep-fetch/cycle/math
+ updated bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/math
+ fetching bpkg:build2.org/rep-fetch/cycle/stable
+ fetching bpkg:build2.org/rep-fetch/cycle/extra (prerequisite of bpkg:build2.org/rep-fetch/cycle/stable)
+ 3 package(s) in 3 repository(s)
+ EOE
+
+ $rep_list >>"EOO"
+ bpkg:build2.org/rep-fetch/cycle/math ($nc_rep/math)
+ bpkg:build2.org/rep-fetch/cycle/stable ($nc_rep/stable)
+ prerequisite bpkg:build2.org/rep-fetch/cycle/extra ($nc_rep/extra)
+ EOO
+ }
+ }
}
: git-repos
@@ -160,38 +324,94 @@ if ($git_supported != true)
# Skip git repository tests.
#
}
-elif ($remote != true)
-{
- git_protocol = 'local'
- .include rep-fetch-git.test
-}
else
{
- : https-dumb
+ : proto
:
+ if ($remote != true)
{
- git_protocol = 'https-dumb'
+ git_protocol = 'local'
.include rep-fetch-git.test
}
-
- : https-smart
- :
+ else
{
- git_protocol = 'https-smart'
- .include rep-fetch-git.test
+ : https-dumb
+ :
+ {
+ git_protocol = 'https-dumb'
+ .include rep-fetch-git.test
+ }
+
+ : https-smart
+ :
+ {
+ git_protocol = 'https-smart'
+ .include rep-fetch-git.test
+ }
+
+ : https-smart-unadv
+ :
+ {
+ git_protocol = 'https-smart-unadv'
+ .include rep-fetch-git.test
+ }
+
+ : git
+ :
+ {
+ git_protocol = 'git'
+ .include rep-fetch-git.test
+ }
}
- : https-smart-unadv
+ : re-clone
:
+ : Test that repository is re-cloned on the location change. Here this happens
+ : due to the scheme change.
+ :
+ if ($remote == true)
{
- git_protocol = 'https-smart-unadv'
- .include rep-fetch-git.test
+ $clone_root_cfg && $rep_add "$rep_git_git/state0/libfoo.git#master";
+ $* 2>! &cfg/.bpkg/repositories/*/***;
+ $rep_add "$rep_git_https_smart_unadv/state0/libfoo.git#master";
+
+ $* 2>>~"%EOE%"
+ %fetching git:.+libfoo#master%
+ %info: re-cloning git:.+libfoo#master due to location change%
+ % info: new location https://.+libfoo.git#master%
+ % info: old location git://.+libfoo.git#master%
+ %.+
+ %Submodule 'libbar' .+https://.+libbar.+%
+ %.+
+ EOE
}
- : git
+ : cleanup-failed
+ :
+ : Test that configuration is cleaned up if fetch fails after the repository
+ : filesystem state is changed.
:
{
- git_protocol = 'git'
- .include rep-fetch-git.test
+ $clone_root_cfg && $rep_add "$rep_git/state0/libfoo.git#master";
+
+ # Extract the repository path from the output line like this:
+ #
+ # Cloning into 'cfg\.bpkg\tmp\f9be881264703b5d\master'...
+ #
+ $* 2>&1 | sed -n -e "s/Cloning into '\(.+master\)'\.{3}/\$1/p" | \
+ sed -n -e 's%(.+[\\/])tmp([\\/].+)%$1repositories$2%p' | \
+ set r;
+
+ # Break the repo (drop the remote repository URL) and try to re-fetch.
+ #
+ rm "$r/.git/config";
+
+ $* 2>>~%EOE% != 0;
+ %.+
+ warning: repository state is now broken and will be cleaned up
+ info: run 'bpkg rep-fetch' to update
+ EOE
+
+ $pkg_status libfoo >'unknown'
}
}
diff --git a/tests/rep-fetch/cycle b/tests/rep-fetch/cycle
new file mode 120000
index 0000000..2116ab2
--- /dev/null
+++ b/tests/rep-fetch/cycle
@@ -0,0 +1 @@
+../common/prereq-cycle \ No newline at end of file
diff --git a/tests/rep-fetch/no-cycle/extra/libbar-1.1.0+1.tar.gz b/tests/rep-fetch/no-cycle/extra/libbar-1.1.0+1.tar.gz
new file mode 100644
index 0000000..890e9e2
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/extra/libbar-1.1.0+1.tar.gz
Binary files differ
diff --git a/tests/rep-fetch/no-cycle/extra/repositories b/tests/rep-fetch/no-cycle/extra/repositories
new file mode 100644
index 0000000..5b70556
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/extra/repositories
@@ -0,0 +1 @@
+: 1
diff --git a/tests/rep-fetch/no-cycle/math/libbar-1.0.0.tar.gz b/tests/rep-fetch/no-cycle/math/libbar-1.0.0.tar.gz
new file mode 100644
index 0000000..97e6e32
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/math/libbar-1.0.0.tar.gz
Binary files differ
diff --git a/tests/rep-fetch/no-cycle/math/repositories b/tests/rep-fetch/no-cycle/math/repositories
new file mode 100644
index 0000000..5b70556
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/math/repositories
@@ -0,0 +1 @@
+: 1
diff --git a/tests/rep-fetch/no-cycle/stable/libfoo-1.0.0.tar.gz b/tests/rep-fetch/no-cycle/stable/libfoo-1.0.0.tar.gz
new file mode 100644
index 0000000..5e7fa17
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/stable/libfoo-1.0.0.tar.gz
Binary files differ
diff --git a/tests/rep-fetch/no-cycle/stable/repositories b/tests/rep-fetch/no-cycle/stable/repositories
new file mode 100644
index 0000000..14d6ce0
--- /dev/null
+++ b/tests/rep-fetch/no-cycle/stable/repositories
@@ -0,0 +1,3 @@
+: 1
+location: ../extra
+:
diff --git a/tests/rep-remove.test b/tests/rep-remove.test
index 0dea240..3717449 100644
--- a/tests/rep-remove.test
+++ b/tests/rep-remove.test
@@ -48,9 +48,72 @@ end
rep_add += -d cfg 2>!
rep_fetch += -d cfg --auth all --trust-yes 2>!
-rep_list += -d cfg
+rep_list += -d cfg --prerequisites --complements
pkg_status += -d cfg
+: invalid-args
+:
+{
+ : clean-all
+ :
+ $* --clean --all 2>>EOE != 0
+ error: both --clean and --all|-a specified
+ info: run 'bpkg help rep-remove' for more information
+ EOE
+
+ : clean-repos
+ :
+ $* --clean $rep/extra 2>>EOE != 0
+ error: both --clean and repository argument specified
+ info: run 'bpkg help rep-remove' for more information
+ EOE
+
+ : all-repos
+ :
+ $* --all $rep/extra 2>>EOE != 0
+ error: both --all|-a and repository argument specified
+ info: run 'bpkg help rep-remove' for more information
+ EOE
+
+ : none
+ :
+ $* 2>>EOE != 0
+ error: repository name or location argument expected
+ info: run 'bpkg help rep-remove' for more information
+ EOE
+}
+
+: clean
+:
+{
+ $clone_cfg;
+ $rep_add $rep/extra && $rep_fetch;
+
+ $* --clean 2>>"EOE";
+ cleaned bpkg:build2.org/rep-remove/extra
+ EOE
+
+ $rep_list >>"EOE";
+ bpkg:build2.org/rep-remove/extra ($rep/extra)
+ EOE
+
+ $pkg_status libbar >'unknown'
+}
+
+: all
+:
+{
+ $clone_cfg;
+ $rep_add $rep/extra && $rep_fetch;
+
+ $* --all 2>>"EOE";
+ removed bpkg:build2.org/rep-remove/extra
+ EOE
+
+ $rep_list >:"";
+ $pkg_status libbar >'unknown'
+}
+
: by-name
:
{
@@ -61,7 +124,8 @@ pkg_status += -d cfg
removed bpkg:build2.org/rep-remove/extra
EOE
- $rep_list >:""
+ $rep_list >:"";
+ $pkg_status libbar >'unknown'
}
: prerequisites-cycle
@@ -89,7 +153,7 @@ pkg_status += -d cfg
removed bpkg:build2.org/rep-remove/testing
EOE
- $rep_list --prerequisites --complements >>"EOO";
+ $rep_list >>"EOO";
bpkg:build2.org/rep-remove/math ($rep/math)
prerequisite bpkg:build2.org/rep-remove/extra ($rep/extra)
prerequisite bpkg:build2.org/rep-remove/stable ($rep/stable)
diff --git a/tests/rep-remove/extra b/tests/rep-remove/extra
new file mode 120000
index 0000000..2047cd9
--- /dev/null
+++ b/tests/rep-remove/extra
@@ -0,0 +1 @@
+../common/prereq-cycle/extra/ \ No newline at end of file
diff --git a/tests/rep-remove/math b/tests/rep-remove/math
new file mode 120000
index 0000000..9f6610d
--- /dev/null
+++ b/tests/rep-remove/math
@@ -0,0 +1 @@
+../common/prereq-cycle/math/ \ No newline at end of file
diff --git a/tests/rep-remove/stable b/tests/rep-remove/stable
new file mode 120000
index 0000000..b29c92b
--- /dev/null
+++ b/tests/rep-remove/stable
@@ -0,0 +1 @@
+../common/prereq-cycle/stable/ \ No newline at end of file