summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdgit23
-rw-r--r--dgit.114
-rw-r--r--tests/lib-build-modes16
-rwxr-xr-xtests/tests/build-modes-gbp1
-rwxr-xr-xtests/tests/oldnewtagalt2
-rwxr-xr-xtests/tests/push-source-with-changes2
6 files changed, 51 insertions, 7 deletions
diff --git a/dgit b/dgit
index 57e1e40..654b3d1 100755
--- a/dgit
+++ b/dgit
@@ -101,7 +101,7 @@ our %forceopts = map { $_=>0 }
our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)");
our $suite_re = '[-+.0-9a-z]+';
-our $cleanmode_re = qr{(?: dpkg-source (?: -d )?
+our $cleanmode_re = qr{(?: dpkg-source (?: -d )? (?: ,no-check )?
| git | git-ff
| check (?: ,ignores )?
| none
@@ -6214,6 +6214,19 @@ sub clean_tree_check_git ($$) {
}
}
+sub clean_tree_check_git_wd ($) {
+ my ($message) = @_;
+ return if $cleanmode =~ m{no-check};
+ return if $patches_applied_dirtily; # yuk
+ clean_tree_check_git 1,
+ (f_ <<END, $message);
+%s
+If this is just missing .gitignore entries, use a different clean
+mode, eg --clean=dpkg-source,no-check (-wdu/-wddu) to ignore them
+or --clean=git (-wg/-wgf) to use \`git clean' instead.
+END
+}
+
sub clean_tree_check () {
# Not yet fully implemented.
# This function needs to not care about modified but tracked files.
@@ -6222,6 +6235,9 @@ sub clean_tree_check () {
if ($cleanmode =~ m{^check}) {
clean_tree_check_git +($cleanmode =~ m{ignores}), __
"tree contains uncommitted files and --clean=check specified";
+ } elsif ($cleanmode =~ m{^dpkg-source}) {
+ clean_tree_check_git_wd __
+ "tree contains uncommitted files (NB dgit didn't run rules clean)";
}
}
@@ -6234,6 +6250,8 @@ sub clean_tree () {
push @cmd, qw(-T clean);
maybe_apply_patches_dirtily();
runcmd_ordryrun_local @cmd;
+ clean_tree_check_git_wd __
+ "tree contains uncommitted files (after running rules clean)";
} elsif ($cleanmode eq 'git') {
runcmd_ordryrun_local @git, qw(clean -xdf);
} elsif ($cleanmode eq 'git-ff') {
@@ -7262,10 +7280,11 @@ sub parseopts () {
} elsif (s/^-wgf$//s) {
push @ropts, $&;
$cleanmode = 'git-ff';
- } elsif (s/^-wd(d?)$//s) {
+ } elsif (s/^-wd(d?)([n]?)$//s) {
push @ropts, $&;
$cleanmode = 'dpkg-source';
$cleanmode .= '-d' if $1;
+ $cleanmode .= ',no-check' if $2 eq 'n';
} elsif (s/^-wc$//s) {
push @ropts, $&;
$cleanmode = 'check';
diff --git a/dgit.1 b/dgit.1
index 1ee0230..ed5205c 100644
--- a/dgit.1
+++ b/dgit.1
@@ -598,6 +598,20 @@ from your working tree,
rather than from your git branch
(for example because of --include-dirty
or because the binary package build uses your working tree).
+
+In all cases,
+dgit will check that there are (after rules clean, if applicable) no
+untracked un-ignored files,
+in case these are files you forgot to git add.
+(Except that this check is not done
+for a `3.0 (quilt)' package
+when dgit has to apply patches, dirtily, to the working tree.)
+If your package does not have a good .gitignore
+you will probably need --clean=dpkg-source,no-check aka -wdn.
+.TP
+.BR --clean=dpkg-source "[" -d "]" ,no-check " | " -wdn " | " -wddn
+Like --clean=dpkg-source, but
+does not care about untracked un-ignored files.
.TP
.BR -N " | " --new
The package is or may be new in this suite. Without this, dgit will
diff --git a/tests/lib-build-modes b/tests/lib-build-modes
index 232d322..837dde0 100644
--- a/tests/lib-build-modes
+++ b/tests/lib-build-modes
@@ -49,7 +49,7 @@ bm-gbp-example-acts () {
bm-prep-ownpackage-branches for-build-modes
- cleanmodes='git dpkg-source'
+ cleanmodes='git dpkg-source,no-check'
for act in "$@"; do
bm-guess-e-source-e-targets "$act"
@@ -151,18 +151,28 @@ bm-compute-expected () {
git) echo >&4 'BUILD-MODES PROGRAM git clean -xdf' ;;
git-ff) echo >&4 'BUILD-MODES PROGRAM git clean -xdff' ;;
check|Ccheck) echo >&4 'BUILD-MODES PROGRAM git clean -dn -x' ;;
- dpkg-source-d)
+ dpkg-source-d|dpkg-source-d,no-check)
echo >&4 "EXAMPLE RULES TARGET clean"
;;
- dpkg-source)
+ dpkg-source|dpkg-source,no-check)
bm-build-deps-ok || tolerate_fail=tolerate
echo >&4 "EXAMPLE RULES TARGET clean"
;;
none) ;;
+ Cdpkg-source*) ;; # handled below
C*) echo "TODO bm eff_cleanmode=$eff_cleanmode" ;;
*) fail "t-compute-expected-run $cleanmode ??" ;;
esac
+ case $eff_cleanmode in
+ dpkg-source|Cdpkg-source|dpkg-source-d|Cdpkg-source-d)
+ echo >&4 'BUILD-MODES PROGRAM git clean -dn'
+ ;;
+ dpkg-source*,no-check|Cdpkg-source*,no-check)
+ ;;
+ Cdpkg-source*) fail "t-compute-expected-run wd $cleanmode ??" ;;
+ esac
+
if [ "x$e_targets" != x ]; then
# e_targets can be " " to mean `/may/ fail due to b-d'
bm-build-deps-ok || tolerate_fail=tolerate
diff --git a/tests/tests/build-modes-gbp b/tests/tests/build-modes-gbp
index d99b791..93d0811 100755
--- a/tests/tests/build-modes-gbp
+++ b/tests/tests/build-modes-gbp
@@ -21,6 +21,7 @@ quirk-clean-fixup () {
}
bm_quirk_before_diff=quirk-clean-fixup
+cleanmodes_dpkgsource_extra=,no-check
bm-prep
for act in \
diff --git a/tests/tests/oldnewtagalt b/tests/tests/oldnewtagalt
index 098fe19..6730918 100755
--- a/tests/tests/oldnewtagalt
+++ b/tests/tests/oldnewtagalt
@@ -9,7 +9,7 @@ cd $p
test-push () {
t-commit "$1"
- t-dgit build-source
+ t-dgit -wgf build-source
t-dgit push
}
diff --git a/tests/tests/push-source-with-changes b/tests/tests/push-source-with-changes
index 580ea3a..2658485 100755
--- a/tests/tests/push-source-with-changes
+++ b/tests/tests/push-source-with-changes
@@ -20,7 +20,7 @@ t-dgit -C ../${p}_1.0_multi.changes push-source --new
# (2) try pushing a source-only changes file
-t-dgit --dpkg-buildpackage:-d build-source
+t-dgit -wddn --dpkg-buildpackage:-d build-source
t-dgit -C ../${p}_1.0_source.changes push-source --new
t-pushed-good master