X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=d74dd85b681c32357628472a12b7291f11995e4a;hb=08b5daae7971c7ab730471d58d665ef087573791;hp=37a61111db92ea2bf3257cb6259b25e667f76348;hpb=13b1e20cfd307469a6a53ad5798476f18176870a;p=dgit.git diff --git a/dgit b/dgit index 37a61111..d74dd85b 100755 --- a/dgit +++ b/dgit @@ -45,6 +45,7 @@ our $ignoredirty = 0; our $noquilt = 0; our $existing_package = 'dpkg'; our $cleanmode = 'dpkg-source'; +our $changes_since_version; our $we_are_responder; our $initiator_tempdir; @@ -113,8 +114,6 @@ sub dscfn ($) { return "${package}_".(stripepoch $vsn).".dsc"; } -sub changesopts () { return @changesopts[1..$#changesopts]; } - our $us = 'dgit'; our $debugprefix = ''; @@ -313,7 +312,8 @@ sub shellquote { local $_; foreach my $a (@_) { $_ = $a; - if (s{['\\]}{\\$&}g || m{\s} || m{[^-_./0-9a-z]}i) { + if (m{[^-=_./0-9a-z]}i) { + s{['\\]}{'\\$&'}g; push @out, "'$_'"; } else { push @out, $_; @@ -1690,6 +1690,26 @@ sub build_prep () { build_maybe_quilt_fixup(); } +sub changesopts () { + my @opts =@changesopts[1..$#changesopts]; + if (!defined $changes_since_version) { + my @vsns = archive_query('archive_query'); + if (@vsns) { + @vsns = map { $_->[0] } @vsns; + @vsns = sort { version_compare_string($a, $b) } @vsns; + $changes_since_version = $vsns[0]; + progress "changelog will contain changes since $vsns[0]"; + } else { + $changes_since_version = '_'; + progress "package seems new, not specifying -v"; + } + } + if ($changes_since_version ne '_') { + unshift @opts, "-v$changes_since_version"; + } + return @opts; +} + sub cmd_build { badusage "dgit build implies --clean=dpkg-source" if $cleanmode ne 'dpkg-source'; @@ -1759,7 +1779,14 @@ sub cmd_sbuild { } } runcmd_ordryrun_local @sbuild, @ARGV, qw(-d), $isuite, $dscfn; - runcmd_ordryrun_local @mergechanges, glob $pat; + my @changesfiles = glob $pat; + @changesfiles = sort { + ($b =~ m/_source\.changes$/ <=> $a =~ m/_source\.changes$/) + or $a cmp $b + } @changesfiles; + fail "wrong number of different changes files (@changesfiles)" + unless @changesfiles; + runcmd_ordryrun_local @mergechanges, @changesfiles; my $multichanges = "${package}_".(stripepoch $version)."_multi.changes"; if (act_local()) { stat $multichanges or fail "$multichanges: $!"; @@ -1811,6 +1838,9 @@ sub parseopts () { } elsif (m/^--new$/) { push @ropts, $_; $new_package=1; + } elsif (m/^--since-version=([^_]+|_)$/) { + push @ropts, $_; + $changes_since_version = $1; } elsif (m/^--(\w+)=(.*)/s && ($om = $opts_opt_map{$1}) && length $om->[0]) { @@ -1864,7 +1894,10 @@ sub parseopts () { } elsif (s/^-N/-/) { push @ropts, $&; $new_package=1; - } elsif (m/^-[vm]/) { + } elsif (s/^-v([^_]+|_)$//s) { + push @ropts, $&; + $changes_since_version = $1; + } elsif (m/^-m/) { push @ropts, $&; push @changesopts, $_; $_ = '';