X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=Debian%2FDgit.pm;h=ec402e4d270598e3f7f6ec725812ab7582c8c7a4;hb=56e6081eca79352f4a79198dbaff40c8611db05f;hp=ebf9d7db0dfcbc5e4838ad9bf6ccbe1cf7f5ccaa;hpb=7ae49acddbd78c5e446f9e1fc5b02ef7d09ae925;p=dgit.git diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index ebf9d7db..ec402e4d 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -51,9 +51,13 @@ BEGIN { git_rev_parse git_cat_file git_get_ref git_get_symref git_for_each_ref git_for_each_tag_referring is_fast_fwd + git_check_unmodified $package_re $component_re $deliberately_re $distro_re $versiontag_re $series_filename_re + $extra_orig_namepart_re + $git_null_obj $branchprefix + $ffq_refprefix initdebug enabledebug enabledebuglevel printdebug debugcmd $debugprefix *debuglevel *DEBUG @@ -80,6 +84,9 @@ our $distro_re = $component_re; our $versiontag_re = qr{[-+.\%_0-9a-zA-Z/]+}; our $branchprefix = 'dgit'; our $series_filename_re = qr{(?:^|\.)series(?!\n)$}s; +our $extra_orig_namepart_re = qr{[-0-9a-z]+}; +our $git_null_obj = '0' x 40; +our $ffq_refprefix = 'ffq-prev'; # policy hook exit status bits # see dgit-repos-server head comment for documentation @@ -108,7 +115,7 @@ sub forkcheck_mainprocess () { sub setup_sigwarn () { forkcheck_setup(); $SIG{__WARN__} = sub { - die $_[0] if forkcheck_mainprocess; + confess $_[0] if forkcheck_mainprocess; }; } @@ -441,6 +448,25 @@ sub git_for_each_tag_referring ($$) { }); } +sub git_check_unmodified () { + foreach my $cached (qw(0 1)) { + my @cmd = qw(git diff --quiet); + push @cmd, qw(--cached) if $cached; + push @cmd, qw(HEAD); + debugcmd "+",@cmd; + $!=0; $?=-1; system @cmd; + return if !$?; + if ($?==256) { + fail + $cached + ? "git index contains changes (does not match HEAD)" + : "working tree is dirty (does not match HEAD)"; + } else { + failedcmd @cmd; + } + } +} + sub is_fast_fwd ($$) { my ($ancestor,$child) = @_; my @cmd = (qw(git merge-base), $ancestor, $child);