git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC/PATCH] git-remote-mediawiki: reset private ref after non-dumb push

From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Date
Aug 26, 2013, 09:16 UTC
Message-ID
<vpqr4dgizhm.fsf@anie.imag.fr>
In-Reply-To
<vpqhaeckfbh.fsf@anie.imag.fr>
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
Show 23 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
>>
>>> How would I do that? The update to the remote namespace is done by Git,
>>> not by the remote-helper.
>>>
>>> OK, I'm now convinced that my solution is the right one. The
>>> alternatives are far more complex and I still fail to see the benefits.
>>
>> Sounds like a plan, even though it smells like the "update is done
>> by Git" that does not have any way to opt-out may be the real design
>> mistake and your "solution" is a work-around to that.
>>
>> Would it be a possibility to make it tunable, perhaps by introducing
>> a capability on the remote-interface side that allows you to tell it
>> not to mess with the remote namespace?
>
> Ideally, it would be possible to ask for a non-update without a fatal
> error on old Git versions, but this is not possible (hence, my fix is
> the "portable" one, that works on Git 1.8.4).
>
> But that's probably the best we can do now.
... and a patch implementing that would look like:
commit e438ddc58a3cedcf66332bddda792954c5905cea
Author: Matthieu Moy <Matthieu.Moy@imag.fr>
Date:   Mon Aug 26 11:10:30 2013 +0200
    transport-helper: add dont-update-private capability
diff --git a/transport-helper.c b/transport-helper.c
index 63cabc3..639b0e3 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -27,7 +27,8 @@ struct helper_data {
                push : 1,
                connect : 1,
                signed_tags : 1,
-               no_disconnect_req : 1;
+               no_disconnect_req : 1,
+               dont_update_private : 1;
        char *export_marks;
        char *import_marks;
        /* These go from remote name (as in "list") to private name */
@@ -205,6 +206,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, "dont-update-private")) {
+                       data->dont_update_private = 1;
                } else if (mandatory) {
                        die("Unknown mandatory capability %s. This remote "
                            "helper probably needs newer version of Git.",
@@ -723,7 +726,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->dont_update_private)
                        continue;
 
                /* propagate back the update to the remote namespace */


(Plus tests and docs)

Based on this, git-remote-mediawiki could simply use:

commit aa745c3ccb6681df8dc6406b00e0d31b26e72d50
Author: Matthieu Moy <Matthieu.Moy@imag.fr>
Date:   Mon Aug 26 11:09:55 2013 +0200

    git-remote-mediawiki: use dont-update-private capability on dumb push

diff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl
index a2e71d6..b29682e 100755
--- a/contrib/mw-to-git/git-remote-mediawiki.perl
+++ b/contrib/mw-to-git/git-remote-mediawiki.perl
@@ -601,6 +601,9 @@ sub mw_capabilities {
        print {*STDOUT} "import\n";
        print {*STDOUT} "list\n";
        print {*STDOUT} "push\n";
+       if ($dumb_push) {
+               print {*STDOUT} "dont-update-private\n";
+       }
        print {*STDOUT} "\n";
        return;
 }
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Previous: Matthieu MoyNext: Felipe Contreras
Message 10 of 28 in “git-remote-mediawiki: reset private ref after non-dumb push”
  1. git-remote-mediawiki: reset private ref after non-dumb pushMatthieu Moy, Aug 13, 2013
  2. Felipe ContrerasAug 21, 2013
  3. Matthieu MoyAug 21, 2013
  4. Felipe ContrerasAug 22, 2013
  5. Matthieu MoyAug 23, 2013
  6. Felipe ContrerasAug 23, 2013
  7. Matthieu MoyAug 24, 2013
  8. Junio C HamanoAug 25, 2013
  9. Matthieu MoyAug 26, 2013
  10. Matthieu MoyAug 26, 2013
  11. Felipe ContrerasAug 26, 2013
  12. Matthieu MoyAug 27, 2013
  13. 1/4 git-remote-mediawiki: add test and check Makefile targetsMatthieu Moy, Aug 29, 2013
  14. 2/4 transport-helper: add dont-update-private capabilityMatthieu Moy, Aug 29, 2013
  15. Felipe ContrerasAug 29, 2013
  16. 1/4 git-remote-mediawiki: add test and check Makefile targetsMatthieu Moy, Sep 2, 2013
  17. 2/4 transport-helper: add no-private-update capabilityMatthieu Moy, Sep 2, 2013
  18. Felipe ContrerasSep 2, 2013
  19. 2/4 transport-helper: add dont-update-private capabilityMatthieu Moy, Sep 2, 2013
  20. 2/4 transport-helper: add no-private-update capabilityMatthieu Moy, Sep 3, 2013
  21. 3/4 git-remote-mediawiki: use no-private-update capability on dumb pushMatthieu Moy, Sep 2, 2013
  22. 4/4 git-remote-mediawiki: no need to update private ref in non-dumb pushMatthieu Moy, Sep 2, 2013
  23. 3/4 git-remote-mediawiki: use dont-update-private capability on dumb pushMatthieu Moy, Aug 29, 2013
  24. Junio C HamanoAug 29, 2013
  25. 4/4 git-remote-mediawiki: no need to update private ref in non-dumb pushMatthieu Moy, Aug 29, 2013
  26. Junio C HamanoAug 29, 2013
  27. Junio C HamanoAug 26, 2013
  28. Matthieu MoyAug 27, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.