+ # only allow changes to gitmaster_branch
+ if ($refname !~ /^refs\/heads\/\Q$config{gitmaster_branch}\E$/) {
+ error sprintf(gettext("you are not allowed to change %s"), $refname);
+ }
+
+ # Avoid chdir when running git here, because the changes
+ # are in the master git repo, not the srcdir repo.
+ # The pre-receive hook already puts us in the right place.
+ $no_chdir=1;
+ push @rets, git_parse_changes(git_commit_info($oldrev."..".$newrev));
+ $no_chdir=0;
+ }
+
+ return reverse @rets;
+}
+
+sub rcs_preprevert ($) {
+ my $rev=shift;
+ my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
+
+ return git_parse_changes(git_commit_info($sha1, 1));
+}
+
+sub rcs_revert ($) {
+ # Try to revert the given rev; returns undef on _success_.
+ my $rev = shift;
+ my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
+
+ if (run_or_non('git', 'revert', '--no-commit', $sha1)) {
+ return undef;