From 9e7dca8bcda26f05bbbf0b8c71b99e8130a9dfcc Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Sun, 28 Aug 2016 18:21:49 -0700 Subject: [PATCH] Projects: enable gui editing of girocco.cleanmirror field Signed-off-by: Kyle J. McKay --- Girocco/CGI.pm | 1 + Girocco/Config.pm | 4 ++-- Girocco/Project.pm | 18 +++++++++++++++--- cgi/editproj.cgi | 7 +++++++ cgi/regproj.cgi | 12 ++++++++++-- html/girocco.js | 18 +++++++++++++++--- 6 files changed, 50 insertions(+), 10 deletions(-) diff --git a/Girocco/CGI.pm b/Girocco/CGI.pm index 6c54452..cffd02a 100644 --- a/Girocco/CGI.pm +++ b/Girocco/CGI.pm @@ -217,6 +217,7 @@ sub print_form_fields { my ($fieldmap, $valuemap, @fields) = @_; foreach my $field (map { $fieldmap->{$_} } @fields) { + defined($field->[2]) && $field->[2] ne 'placeholder' or next; my $title=''; if (defined($field->[3]) && $field->[3] ne '') { $title=' title="'.html_esc($field->[3], 1).'"' diff --git a/Girocco/Config.pm b/Girocco/Config.pm index 32b5046..a5e779d 100644 --- a/Girocco/Config.pm +++ b/Girocco/Config.pm @@ -211,10 +211,10 @@ our $project_passwords = 1; our $project_owners = 'email'; # Which project fields to make editable, out of 'shortdesc', 'homepage', 'README', -# 'notifymail', 'reverseorder', 'summaryonly', 'notifytag' and 'notifyjson' +# 'cleanmirror', 'notifymail', 'reverseorder', 'summaryonly', 'notifytag' and 'notifyjson' # 'notifycia' was used by the now defunct CIA service and while allowing it to # be edited does work and the value is saved, the value is totally ignored by Girocco -our @project_fields = qw(homepage shortdesc README notifymail reverseorder summaryonly notifytag notifyjson); +our @project_fields = qw(cleanmirror homepage shortdesc README notifymail reverseorder summaryonly notifytag notifyjson); # Minimal number of seconds to pass between two updates of a project. our $min_mirror_interval = 3600; # 1 hour diff --git a/Girocco/Project.pm b/Girocco/Project.pm index cd91259..da8c486 100644 --- a/Girocco/Project.pm +++ b/Girocco/Project.pm @@ -34,6 +34,7 @@ BEGIN { } our $metadata_fields = { + cleanmirror => ['Mirror refs', 'cleanmirror', 'placeholder'], homepage => ['Homepage URL', 'hp', 'text'], shortdesc => ['Short description', 'desc', 'text'], README => [''. @@ -248,6 +249,7 @@ sub _properties_load { } $self->_readlocalconfigfile unless ref($self->{configfilehash}) eq 'HASH'; + $self->{cleanmirror} = _boolval($self->{configfilehash}->{'girocco.cleanmirror'}, 0); $self->{statusupdates} = _boolval($self->{configfilehash}->{'gitweb.statusupdates'}, 1); $self->{reverseorder} = _boolval($self->{configfilehash}->{'hooks.reverseorder'}, 0); $self->{summaryonly} = _boolval($self->{configfilehash}->{'hooks.summaryonly'}, 0); @@ -272,6 +274,10 @@ sub _properties_save { foreach my $prop (keys %propmap) { $self->_property_fput($prop, $self->{$prop}); } + $self->{cleanmirror} = 0 + unless defined($self->{cleanmirror}) && $self->{cleanmirror} =~ /^\d+$/; + system($Girocco::Config::git_bin, '--git-dir='.$self->{path}, 'config', '--bool', + "girocco.cleanmirror", $self->{cleanmirror}); $self->{statusupdates} = 1 unless defined($self->{statusupdates}) && $self->{statusupdates} =~ /^\d+$/; system($Girocco::Config::git_bin, '--git-dir='.$self->{path}, 'config', '--bool', @@ -601,7 +607,12 @@ sub cgi_fill { } # No setting the url unless we're either new or an existing mirror! - $self->{url} = $gcgi->wparam('url') unless $self->{loaded} && !$self->{mirror}; + unless ($self->{loaded} && !$self->{mirror}) { + $self->{url} = $gcgi->wparam('url') ; + if ($field_enabled->('cleanmirror')) { + $self->{cleanmirror} = $gcgi->wparam('cleanmirror') || 0; + } + } # Always validate the url if we're an existing mirror if ((defined($self->{url}) && $self->{url} ne '') || ($self->{loaded} && $self->{mirror})) {{ # Always allow the url to be left unchanged without validation when editing @@ -723,13 +734,14 @@ sub form_defaults { name => $self->{name}, email => $self->{email}, url => $self->{url}, + cleanmirror => $self->{cleanmirror}, desc => html_esc($self->{desc}), README => html_esc($self->{README}), hp => $self->{hp}, users => $self->{users}, notifymail => html_esc($self->{notifymail}), - reverseorder => html_esc($self->{reverseorder}), - summaryonly => html_esc($self->{summaryonly}), + reverseorder => $self->{reverseorder}, + summaryonly => $self->{summaryonly}, notifytag => html_esc($self->{notifytag}), notifyjson => html_esc($self->{notifyjson}), notifycia => html_esc($self->{notifycia}), diff --git a/cgi/editproj.cgi b/cgi/editproj.cgi index 3f41849..0468d7e 100755 --- a/cgi/editproj.cgi +++ b/cgi/editproj.cgi @@ -137,6 +137,13 @@ EOT if ($proj->{mirror}) { print "Repository URL:\n"; + print 'Mirror refs:'. + ''."\n" + if grep(/cleanmirror/, @Girocco::Config::project_fields); } else { print <Users: diff --git a/cgi/regproj.cgi b/cgi/regproj.cgi index 1f1dd89..34bd308 100755 --- a/cgi/regproj.cgi +++ b/cgi/regproj.cgi @@ -33,6 +33,7 @@ my %values = ( email => '', hp => '', mirror => $mirror_mode_set, + cleanmirror => 1, notifymail => '', reverseorder => 1, summaryonly => '', @@ -249,7 +250,7 @@ my $mirrorentry = ''; if ($me) { $mirrorentry = 'Mirror source:'; if (!$Girocco::Config::mirror_sources) { - $mirrorentry .= ""; + $mirrorentry .= ""; } else { $mirrorentry .= ""."\n"; foreach my $source (@$Girocco::Config::mirror_sources) { @@ -290,7 +291,14 @@ if ($me) { } $mirrorentry .= "
"; } - $mirrorentry .= ''; + $mirrorentry .= ''."\n";; + $mirrorentry .= 'Mirror refs:'. + ''."\n" + if grep(/cleanmirror/, @Girocco::Config::project_fields); } if ($me and $pe) { $modechooser = <