summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-01-08 00:03:53 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-01-08 22:14:48 +0000
commit19c2d673555201bf2bf6891cdd69236b1e599fb0 (patch)
tree244539bb07916235f0db4b76d027207b0865b300
parentdda17d8a6fec27f631653cf8ac63ba6d96e642c3 (diff)
dgit: dsc Dgit field handling: Parse additional data
So far we don't do much with it, so this akes no change except to messages. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rw-r--r--Debian/Dgit.pm3
-rwxr-xr-xdgit10
2 files changed, 11 insertions, 2 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm
index 5a7b59d..6294587 100644
--- a/Debian/Dgit.pm
+++ b/Debian/Dgit.pm
@@ -50,7 +50,7 @@ BEGIN {
git_get_ref git_for_each_ref
git_for_each_tag_referring is_fast_fwd
$package_re $component_re $deliberately_re
- $distro_re
+ $distro_re $versiontag_re
$branchprefix
initdebug enabledebug enabledebuglevel
printdebug debugcmd
@@ -67,6 +67,7 @@ our $package_re = '[0-9a-z][-+.0-9a-z]*';
our $component_re = '[0-9a-zA-Z][-+.0-9a-zA-Z]*';
our $deliberately_re = "(?:TEST-)?$package_re";
our $distro_re = $component_re;
+our $versiontag_re = qr{[-+.\%_0-9a-zA-Z/]+};
our $branchprefix = 'dgit';
# policy hook exit status bits
diff --git a/dgit b/dgit
index eb6fb9c..7d2dd85 100755
--- a/dgit
+++ b/dgit
@@ -1683,6 +1683,7 @@ sub create_remote_git_repo () {
}
our ($dsc_hash,$lastpush_mergeinput);
+our ($dsc_distro, $dsc_hint_tag, $dsc_hint_url);
our $ud = '.git/dgit/unpack';
@@ -2712,8 +2713,15 @@ sub parse_dsc_field ($$) {
}
if (!defined $f) {
progress "$what: NO git hash";
- } elsif ($f =~ m/^\w+/) {
+ } elsif (($dsc_hash, $dsc_distro, $dsc_hint_tag, $dsc_hint_url)
+ = $f =~ m/^(\w+) ($distro_re) ($versiontag_re) (\S+)(?:\s|$)/) {
+ progress "$what: specified git info ($dsc_distro)";
+ $dsc_hint_tag = [ $dsc_hint_tag ];
+ } elsif ($f =~ m/^\w+\s*$/) {
$dsc_hash = $&;
+ $dsc_distro //= 'debian';
+ $dsc_hint_tag = [ debiantags +(getfield $dsc, 'Version'),
+ $dsc_distro ];
progress "$what: specified git hash";
} else {
fail "$what: invalid Dgit info";