Merge branch 'mm/mediawiki-dumb-push-fix'

* mm/mediawiki-dumb-push-fix:
  git-remote-mediawiki: no need to update private ref in non-dumb push
  git-remote-mediawiki: use no-private-update capability on dumb push
  transport-helper: add no-private-update capability
  git-remote-mediawiki: add test and check Makefile targets
This commit is contained in:
Junio C Hamano 2013-09-12 14:41:41 -07:00
commit 100ce1c543
6 changed files with 34 additions and 4 deletions

View File

@ -120,6 +120,11 @@ connecting (see the 'connect' command under COMMANDS).
When choosing between 'push' and 'export', Git prefers 'push'.
Other frontends may have some other order of preference.
'no-private-update'::
When using the 'refspec' capability, git normally updates the
private ref on successful push. This update is disabled when
the remote-helper declares the capability 'no-private-update'.
Capabilities for Fetching
^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -24,6 +24,11 @@ INSTLIBDIR=$(shell $(MAKE) -C $(GIT_ROOT_DIR)/perl \
all: build
test: all
$(MAKE) -C t
check: perlcritic test
install_pm:
install $(GIT_MEDIAWIKI_PM) $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM)
@ -41,4 +46,7 @@ clean:
rm $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM)
perlcritic:
perlcritic -2 *.perl
perlcritic -5 $(SCRIPT_PERL)
-perlcritic -2 $(SCRIPT_PERL)
.PHONY: all test check install_pm install clean perlcritic

View File

@ -590,6 +590,9 @@ sub mw_capabilities {
print {*STDOUT} "import\n";
print {*STDOUT} "list\n";
print {*STDOUT} "push\n";
if ($dumb_push) {
print {*STDOUT} "no-private-update\n";
}
print {*STDOUT} "\n";
return;
}
@ -1211,7 +1214,6 @@ sub mw_push_revision {
}
if (!$dumb_push) {
run_git(qq(notes --ref=${remotename}/mediawiki add -f -m "mediawiki_revision: ${mw_revision}" ${sha1_commit}));
run_git(qq(update-ref -m "Git-MediaWiki push" refs/mediawiki/${remotename}/master ${sha1_commit} ${sha1_child}));
}
}

View File

@ -38,6 +38,7 @@ do
echo "*export-marks $gitmarks"
fi
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
echo
;;
list)

View File

@ -182,6 +182,17 @@ test_expect_success 'push update refs' '
)
'
test_expect_success 'push update refs disabled by no-private-update' '
(cd local &&
echo more-update >>file &&
git commit -a -m more-update &&
git rev-parse --verify testgit/origin/heads/update >expect &&
GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE=t git push origin update &&
git rev-parse --verify testgit/origin/heads/update >actual &&
test_cmp expect actual
)
'
test_expect_success 'push update refs failure' '
(cd local &&
git checkout update &&

View File

@ -28,7 +28,8 @@ struct helper_data {
connect : 1,
signed_tags : 1,
check_connectivity : 1,
no_disconnect_req : 1;
no_disconnect_req : 1,
no_private_update : 1;
char *export_marks;
char *import_marks;
/* These go from remote name (as in "list") to private name */
@ -208,6 +209,8 @@ static struct child_process *get_helper(struct transport *transport)
strbuf_addstr(&arg, "--import-marks=");
strbuf_addstr(&arg, capname + strlen("import-marks "));
data->import_marks = strbuf_detach(&arg, NULL);
} else if (!prefixcmp(capname, "no-private-update")) {
data->no_private_update = 1;
} else if (mandatory) {
die("Unknown mandatory capability %s. This remote "
"helper probably needs newer version of Git.",
@ -738,7 +741,7 @@ static void push_update_refs_status(struct helper_data *data,
if (push_update_ref_status(&buf, &ref, remote_refs))
continue;
if (!data->refspecs)
if (!data->refspecs || data->no_private_update)
continue;
/* propagate back the update to the remote namespace */