# file : tests/rep-fetch-git-refname.testscript # license : MIT; see accompanying LICENSE file : fetch : { $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment"; if ($git_protocol == 'https-dumb') info = "$info_ref_hist$reason_dumb$info_dumb" end; $* 2>>~"%EOE%" %fetching git:.+libfoo$fragment% %querying .+libfoo\.git% %fetching from .+libfoo\.git% $info 1 package\(s\) in 1 repository\(s\) EOE } : re-fetch : { : unchanged : { $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment"; $* 2>!; $* 2>>~"%EOE%" %fetching git:.+libfoo$fragment% %querying .+libfoo\.git% 1 package\(s\) in 1 repository\(s\) EOE } : changed : { g = git -C u = "$rep_git/state1" d = cfg/libfoo-1.0.0 $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment"; # Extract the repository path from the output line like this: # # fetching from <url> in 'cfg/.bpkg/tmp/4bde15f59461'... # $* -v 2>&1 | \ sed -n -e "s/fetching from .+ in '\(.+\)'/\$1/p" | \ sed -n -e 's%(.+[\\/])tmp([\\/].+)%$1repos$2%p' | \ set r; # Note that the commit for doc/style/basic submodule is not at the branch # tip and so is not advertised. # info1 = '%.{0}'; info2 = '%.{0}'; info3 = '%.{0}'; info4 = '%.{0}'; if ($git_protocol == 'local' || \ $git_protocol == 'https-smart' || \ $git_protocol == 'git' || \ $git_protocol == 'git-unadv' || \ $git_protocol == 'ssh' || \ $git_protocol == 'ssh-unadv') info2 = "$info_repo_hist for submodule 'doc/style/basic'$reason_unadv" elif ($git_protocol == 'https-dumb') info1 = "$info_ref_hist for submodule 'doc/style'$reason_dumb$info_dumb" info2 = "$info_repo_hist for submodule 'doc/style/basic'$reason_dumb$info_dumb" info3 = "$info_ref_hist for submodule 'libbar'$reason_dumb$info_dumb" info4 = "$info_ref_hist for submodule 'libbar/extras'$reason_dumb$info_dumb" end; $pkg_checkout libfoo/1.0.0 2>>~"%EOE%"; checking out libfoo/1.0.0 %querying .+style\.git%? %fetching submodule 'doc/style' from .+style\.git% $info1 %submodule path 'doc/style': checked out .+% %querying .+style-basic\.git%? %fetching submodule 'doc/style/basic' from .+style-basic\.git% $info2 %submodule path 'doc/style/basic': checked out .+% %querying .+libbar\.git%? %fetching submodule 'libbar' from .+libbar\.git% $info3 %submodule path 'libbar': checked out .+% %fetching submodule 'libbar/extras' from .+style-basic\.git+% $info4 %submodule path 'libbar/extras': checked out .+% distributing libfoo/1.0.0 checked out libfoo/1.0.0 EOE # While at it, check that the fetch was shallow (and the repository # contains a single commit), unless the protocol is dumb. # if ($git_protocol != 'https-dumb') $g "$r" log '--pretty=format:%d %s' >>:~%EOO% % \(.+\) .+% EOO end; $g "$r" config remote.origin.url "$u/libfoo.git"; # Preconditions. # test -f $d/tests/TODO; test -f $d/libbar/libbar/manifest; test -f $d/doc/style/README != 0; test -d $d/libbaz != 0; if ($git_protocol == 'https-dumb') info = "$info_ref_hist$reason_dumb$info_dumb" end; $* 2>>~"%EOE%" 1>&2; %fetching git:.+libfoo$fragment% %querying .+libfoo\.git% %fetching from .+libfoo\.git% $info %warning: unable to rmdir .?libbar.?: .+% 1 package\(s\) in 1 repository\(s\) EOE $pkg_drop libfoo; info1 = '%.{0}'; info2 = '%.{0}'; if ($git_protocol == 'https-dumb') info1 = "$info_ref_hist for submodule 'doc/style'$reason_dumb$info_dumb" info2 = "$info_ref_hist for submodule 'libbaz'$reason_dumb$info_dumb" end; $pkg_checkout libfoo/1.0.0 2>>~"%EOE%"; checking out libfoo/1.0.0 %querying .+style\.git%? %fetching submodule 'doc/style' from .+style\.git% $info1 %submodule path 'doc/style': checked out .+% %submodule path 'doc/style/basic': checked out .+% %querying .+libbaz\.git%? %fetching submodule 'libbaz' from .+libbaz\.git% $info2 %submodule path 'libbaz': checked out .+% distributing libfoo/1.0.0 checked out libfoo/1.0.0 EOE # Postconditions. # test -d $d/tests != 0; test -d $d/libbar != 0; test -f $d/doc/style/README; test -f $d/libbaz/manifest; $pkg_drop libfoo } : no-progress : { $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment"; $* --no-progress 2>>~"%EOE%"; %fetching git:.+libfoo$fragment% 1 package\(s\) in 1 repository\(s\) EOE $pkg_checkout --no-progress libfoo/1.0.0 2>>EOE; checked out libfoo/1.0.0 EOE $pkg_drop libfoo } }