our $suite_re = '[-+.0-9a-z]+';
our $cleanmode_re = qr{(?: dpkg-source (?: -d )? (?: ,no-check | ,all-check )?
our $suite_re = '[-+.0-9a-z]+';
our $cleanmode_re = qr{(?: dpkg-source (?: -d )? (?: ,no-check | ,all-check )?
sub generate_commits_from_dsc () {
# See big comment in fetch_from_archive, below.
# See also README.dsc-import.
sub generate_commits_from_dsc () {
# See big comment in fetch_from_archive, below.
# See also README.dsc-import.
ensure_setup_existing_tree();
# Ensures that lrref() is what is actually in the archive, one way
ensure_setup_existing_tree();
# Ensures that lrref() is what is actually in the archive, one way
-sub clean_tree_check_git ($$) {
- my ($honour_ignores, $message) = @_;
+sub clean_tree_check_git ($$$) {
+ my ($honour_ignores, $message, $ignmessage) = @_;
my @cmd = (@git, qw(clean -dn));
push @cmd, qw(-x) unless $honour_ignores;
my $leftovers = cmdoutput @cmd;
if (length $leftovers) {
print STDERR $leftovers, "\n" or confess $!;
my @cmd = (@git, qw(clean -dn));
push @cmd, qw(-x) unless $honour_ignores;
my $leftovers = cmdoutput @cmd;
if (length $leftovers) {
print STDERR $leftovers, "\n" or confess $!;
return if $cleanmode =~ m{no-check};
return if $patches_applied_dirtily; # yuk
clean_tree_check_git +($cleanmode !~ m{all-check}),
return if $cleanmode =~ m{no-check};
return if $patches_applied_dirtily; # yuk
clean_tree_check_git +($cleanmode !~ m{all-check}),
If this is just missing .gitignore entries, use a different clean
mode, eg --clean=dpkg-source,no-check (-wdn/-wddn) to ignore them
or --clean=git (-wg/-wgf) to use \`git clean' instead.
If this is just missing .gitignore entries, use a different clean
mode, eg --clean=dpkg-source,no-check (-wdn/-wddn) to ignore them
or --clean=git (-wg/-wgf) to use \`git clean' instead.
# This function needs to not care about modified but tracked files.
# That was done by check_not_dirty, and by now we may have run
# the rules clean target which might modify tracked files (!)
if ($cleanmode =~ m{^check}) {
clean_tree_check_git +($cleanmode =~ m{ignores}), __
# This function needs to not care about modified but tracked files.
# That was done by check_not_dirty, and by now we may have run
# the rules clean target which might modify tracked files (!)
if ($cleanmode =~ m{^check}) {
clean_tree_check_git +($cleanmode =~ m{ignores}), __
} elsif ($cleanmode =~ m{^dpkg-source}) {
clean_tree_check_git_wd __
"tree contains uncommitted files (NB dgit didn't run rules clean)";
} elsif ($cleanmode =~ m{^git}) {
} elsif ($cleanmode =~ m{^dpkg-source}) {
clean_tree_check_git_wd __
"tree contains uncommitted files (NB dgit didn't run rules clean)";
} elsif ($cleanmode =~ m{^git}) {
- # If we were actually cleaning these files would be summarily
- # deleted. Since we're not, and not using the working tree
- # anyway, we can just ignore them - nothing will use them.
+ clean_tree_check_git 1, __
+ "tree contains uncommited, untracked, unignored files\n".
+ "You can use --clean=git[-ff],always (-wga/-wgfa) to delete them.", '';
runcmd_ordryrun_local @cmd;
clean_tree_check_git_wd __
"tree contains uncommitted files (after running rules clean)";
runcmd_ordryrun_local @cmd;
clean_tree_check_git_wd __
"tree contains uncommitted files (after running rules clean)";
runcmd_ordryrun_local @git, qw(clean -xdff);
} elsif ($cleanmode =~ m{^check}) {
clean_tree_check();
runcmd_ordryrun_local @git, qw(clean -xdff);
} elsif ($cleanmode =~ m{^check}) {
clean_tree_check();
# Clean the tree because we're going to use the contents of
# $maindir. (We trying to include dirty changes in the source
# package, or we are running the builder in $maindir.)
# Clean the tree because we're going to use the contents of
# $maindir. (We trying to include dirty changes in the source
# package, or we are running the builder in $maindir.)