diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2014-01-12 18:24:18 +0000 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2014-03-05 18:29:02 +0000 |
commit | 86b0a275600e7e40a5cda380797163dc661f903d (patch) | |
tree | c824e4a41e03f689c53753e32edd616fb4b924d8 /dgit-repos-server | |
parent | 4c3ff1c38c7db68f382041fb1068d092eaabd875 (diff) |
dgit-repos-server: wip
Diffstat (limited to 'dgit-repos-server')
-rw-r--r-- | dgit-repos-server | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/dgit-repos-server b/dgit-repos-server index 0f7c4b0..677e3d7 100644 --- a/dgit-repos-server +++ b/dgit-repos-server @@ -242,7 +242,7 @@ sub verifytag () { } sub checktag () { - tagh1('object') eq $branchval or die; + tagh1('object') eq $commit or die; tagh1('type') eq 'commit' or die; tagh1('tag') eq $tagname or die; @@ -250,9 +250,22 @@ sub checktag () { $v =~ y/~:/_%/; $tagname eq "debian/$v" or die; - check fast forward; + # check that our ref is being fast-forwarded + if ($oldcommit =~ m/[^0]/) { + $?=0; $!=0; my $mb = `git merge-base $commit $oldcommit`; + chomp $mb; + $mb eq $oldcommit or reject "not fast forward on dgit branch"; + } } +sub onwardpush () { + $!=0; + my $r = system (qw(git send-pack), + $destrepo, + "$commit:refs/dgit/$suite", + "$tagval:refs/tags/$tagname"); + !$r or die "onward push failed: $r $!"; +} sub stunthook () { chdir $workrepo or die "chdir $workrepo: $!"; @@ -261,7 +274,7 @@ sub stunthook () { parsetag(); verifytag(); checktag(); -... ... + onwardpush(); } #----- arg parsing and main program ----- @@ -308,6 +321,10 @@ sub parseargs () { or die "requested command $cmd not understood"; $method = $1; $pkg = $2; + my $func = $method; + $func =~ y/-/_/; + $func = $main::{"main__$func"}; + &$func; } else { die; } @@ -315,7 +332,7 @@ sub parseargs () { $destrepo = "$dgitrepos/$pkg.git"; } -sub main () { +sub main__git_receive_pack () { parseargs(); fixme check method; makeworkingclone(); |