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'. When choosing between 'push' and 'export', Git prefers 'push'.
Other frontends may have some other order of preference. 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 Capabilities for Fetching
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -24,6 +24,11 @@ INSTLIBDIR=$(shell $(MAKE) -C $(GIT_ROOT_DIR)/perl \
all: build all: build
test: all
$(MAKE) -C t
check: perlcritic test
install_pm: install_pm:
install $(GIT_MEDIAWIKI_PM) $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM) install $(GIT_MEDIAWIKI_PM) $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM)
@ -41,4 +46,7 @@ clean:
rm $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM) rm $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM)
perlcritic: 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} "import\n";
print {*STDOUT} "list\n"; print {*STDOUT} "list\n";
print {*STDOUT} "push\n"; print {*STDOUT} "push\n";
if ($dumb_push) {
print {*STDOUT} "no-private-update\n";
}
print {*STDOUT} "\n"; print {*STDOUT} "\n";
return; return;
} }
@ -1211,7 +1214,6 @@ sub mw_push_revision {
} }
if (!$dumb_push) { if (!$dumb_push) {
run_git(qq(notes --ref=${remotename}/mediawiki add -f -m "mediawiki_revision: ${mw_revision}" ${sha1_commit})); 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" echo "*export-marks $gitmarks"
fi fi
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags" test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
echo echo
;; ;;
list) 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' ' test_expect_success 'push update refs failure' '
(cd local && (cd local &&
git checkout update && git checkout update &&

View File

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