chiark / gitweb /
Add rsync to test depends
[dgit.git] / dgit
diff --git a/dgit b/dgit
index f77d11f4d25ff58a0ec25132bc6f960997b9b621..9e2e66e4841b4adb690225fab1def69b6229df6d 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -447,7 +447,7 @@ our %defcfg = ('dgit.default.distro' => 'debian',
               'dgit-distro.debian.git-check' => 'url',
               'dgit-distro.debian.git-check-suffix' => '/info/refs',
               'dgit-distro.debian/push.git-url' => '',
-              'dgit-distro.debian/push.git-host' => 'dgit-git.debian.net',
+              'dgit-distro.debian/push.git-host' => 'push.dgit.debian.org',
               'dgit-distro.debian/push.git-user-force' => 'dgit',
               'dgit-distro.debian/push.git-proto' => 'git+ssh://',
               'dgit-distro.debian/push.git-path' => '/dgit/debian/repos',
@@ -547,10 +547,29 @@ sub access_quirk () {
     return ('none',undef);
 }
 
-our $access_pushing = 0;
+our $access_forpush;
+
+sub access_forpush_config () {
+    my $d = access_basedistro();
+    my $v = cfg("dgit-distro.$d.readonly", 'RETURN-UNDEF');
+    $v //= 'a';
+    return
+       $v =~ m/^[ty1]/ ? 0 : # force readonly,    forpush = 0
+       $v =~ m/^[fn0]/ ? 1 : # force nonreadonly, forpush = 1
+       $v =~ m/^[a]/  ? '' : # auto,              forpush = ''
+       badcfg "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)";
+}
+
+sub access_forpush () {
+    $access_forpush //= access_forpush_config();
+    return $access_forpush;
+}
 
 sub pushing () {
-    $access_pushing = 1;
+    die "$access_forpush ?" if ($access_forpush // 1) ne 1;
+    badcfg "pushing but distro is configured readonly"
+       if access_forpush_config() eq '0';
+    $access_forpush = 1;
 }
 
 sub access_distros () {
@@ -568,7 +587,7 @@ sub access_distros () {
     unshift @l, $instead_distro;
     @l = grep { defined } @l;
 
-    if ($access_pushing) {
+    if (access_forpush()) {
        @l = map { ("$_/push", $_) } @l;
     }
     @l;
@@ -645,7 +664,7 @@ sub access_giturl (;$) {
     my ($optional) = @_;
     my $url = access_cfg('git-url','RETURN-UNDEF');
     my $suffix;
-    if (!defined $url) {
+    if (!length $url) {
        my $proto = access_cfg('git-proto', 'RETURN-UNDEF');
        return undef unless defined $proto;
        $url =
@@ -3037,6 +3056,7 @@ my $cmd = shift @ARGV;
 $cmd =~ y/-/_/;
 
 if (!defined $quilt_mode) {
+    local $access_forpush;
     $quilt_mode = cfg('dgit.force.quilt-mode', 'RETURN-UNDEF')
        // access_cfg('quilt-mode', 'RETURN-UNDEF')
        // 'linear';