From: Junio C Hamano <gitster@pobox.com>
To: Denton Liu <liu.denton@gmail.com>
Cc: git@vger.kernel.org, anmolmago@gmail.com, briankyho@gmail.com,
david.lu97@outlook.com, shirui.wang@hotmail.com
Subject: Re: [PATCH v3] remote: add --save-to-push option to git remote set-url
Date: Tue, 13 Nov 2018 18:46:40 +0900 [thread overview]
Message-ID: <xmqqy39xux6n.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <8fded8b84b593497177de740f80b3499c4269758.1541740174.git.liu.denton@gmail.com> (Denton Liu's message of "Fri, 9 Nov 2018 00:20:02 -0500")
Denton Liu <liu.denton@gmail.com> writes:
> This adds the --save-to-push option to `git remote set-url` such that
> when executed, we move the remote.*.url to remote.*.pushurl and set
> remote.*.url to the given url argument.
>
> For example, if we have the following config:
>
> [remote "origin"]
> url = git@github.com:git/git.git
>
> `git remote set-url --save-to-push origin https://github.com/git/git.git`
> would change the config to the following:
>
> [remote "origin"]
> url = https://github.com/git/git.git
> pushurl = git@github.com:git/git.git
>
> Signed-off-by: Denton Liu <liu.denton@gmail.com>
> ---
> On Fri, Nov 09, 2018 at 12:15:22PM +0900, Junio C Hamano wrote:
>> This sounds more like "saving to push" (i.e. what you are saving is
>> the existing "url" and the "push" is a shorthand for "pushURL",
>> which is the location the old value of "url" is aved to), not "save
>> (the) push(URL)". So if adding this option makes sense, I would say
>> "--save-to-push" (or even "--save-to-pushURL") may be a more
>> appropriate name for it.
>>
>
> My original intention was for it to mean "save push behavior" but I
> agree with you that it's unclear so I'm changing it to --save-to-push.
>
>> Ambigous in what way? You asked the current URL to be saved as a
>> pushURL, so existing pushURL destinations should not come into play,
>> I would think. If there are more than one URL (not pushURL), on the
>> other hand, I think you have a bigger problem (where would "git fetch"
>> fetch from, and how would these multiple URLs are prevented from
>> trashing refs/remotes/$remote/* with each other's refs?), so
>> stopping the operation before "set-url" makes the problem worse is
>> probably a good idea, but I think that is true with or without this
>> new option.
>>
>
>> I _think_ in the future (if this option turns out to be widely used)
>> people may ask for this condition to be loosened somewhat, but it is
>> relatively easy to start restrictive and then to loosen later, so I
>> think this is OK for now.
>>
>
> I agree, there's no reason why we shouldn't allow appending to the push
> URLs if one already exists so I removed that removed that restriction.
> ---
> Documentation/git-remote.txt | 5 +++++
> builtin/remote.c | 26 +++++++++++++++++++++-----
> t/t5505-remote.sh | 11 +++++++++++
> 3 files changed, 37 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
> index 0cad37fb81..8f9d700252 100644
> --- a/Documentation/git-remote.txt
> +++ b/Documentation/git-remote.txt
> @@ -19,6 +19,7 @@ SYNOPSIS
> 'git remote set-url' [--push] <name> <newurl> [<oldurl>]
> 'git remote set-url --add' [--push] <name> <newurl>
> 'git remote set-url --delete' [--push] <name> <url>
> +'git remote set-url --save-to-push' <name> <url>
> 'git remote' [-v | --verbose] 'show' [-n] <name>...
> 'git remote prune' [-n | --dry-run] <name>...
> 'git remote' [-v | --verbose] 'update' [-p | --prune] [(<group> | <remote>)...]
> @@ -155,6 +156,10 @@ With `--delete`, instead of changing existing URLs, all URLs matching
> regex <url> are deleted for remote <name>. Trying to delete all
> non-push URLs is an error.
> +
> +With `--save-to-push`, the current URL is saved into the push URL before
> +setting the URL to <url>. Note that this command will not work if more than one
> +URL is defined because the behavior would be ambiguous.
> ++
> Note that the push URL and the fetch URL, even though they can
> be set differently, must still refer to the same place. What you
> pushed to the push URL should be what you would see if you
> diff --git a/builtin/remote.c b/builtin/remote.c
> index f7edf7f2cb..3249c3face 100644
> --- a/builtin/remote.c
> +++ b/builtin/remote.c
> @@ -24,8 +24,9 @@ static const char * const builtin_remote_usage[] = {
> N_("git remote set-branches [--add] <name> <branch>..."),
> N_("git remote get-url [--push] [--all] <name>"),
> N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
> - N_("git remote set-url --add <name> <newurl>"),
> - N_("git remote set-url --delete <name> <url>"),
> + N_("git remote set-url --add [--push] <name> <newurl>"),
> + N_("git remote set-url --delete [--push] <name> <url>"),
> + N_("git remote set-url --save-to-push <name> <url>"),
> NULL
> };
>
> @@ -77,8 +78,9 @@ static const char * const builtin_remote_geturl_usage[] = {
>
> static const char * const builtin_remote_seturl_usage[] = {
> N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
> - N_("git remote set-url --add <name> <newurl>"),
> - N_("git remote set-url --delete <name> <url>"),
> + N_("git remote set-url --add [--push] <name> <newurl>"),
> + N_("git remote set-url --delete [--push] <name> <url>"),
> + N_("git remote set-url --save-to-push <name> <url>"),
> NULL
> };
>
> @@ -1519,7 +1521,7 @@ static int get_url(int argc, const char **argv)
>
> static int set_url(int argc, const char **argv)
> {
> - int i, push_mode = 0, add_mode = 0, delete_mode = 0;
> + int i, push_mode = 0, save_to_push = 0, add_mode = 0, delete_mode = 0;
> int matches = 0, negative_matches = 0;
> const char *remotename = NULL;
> const char *newurl = NULL;
> @@ -1532,6 +1534,8 @@ static int set_url(int argc, const char **argv)
> struct option options[] = {
> OPT_BOOL('\0', "push", &push_mode,
> N_("manipulate push URLs")),
> + OPT_BOOL('\0', "save-to-push", &save_to_push,
> + N_("change fetching URL behavior")),
> OPT_BOOL('\0', "add", &add_mode,
> N_("add URL")),
> OPT_BOOL('\0', "delete", &delete_mode,
> @@ -1543,6 +1547,8 @@ static int set_url(int argc, const char **argv)
>
> if (add_mode && delete_mode)
> die(_("--add --delete doesn't make sense"));
> + if (save_to_push && (push_mode || add_mode || delete_mode))
> + die(_("--save-to-push cannot be used with other options"));
>
> if (argc < 3 || argc > 4 || ((add_mode || delete_mode) && argc != 3))
> usage_with_options(builtin_remote_seturl_usage, options);
> @@ -1564,6 +1570,16 @@ static int set_url(int argc, const char **argv)
> urlset = remote->pushurl;
> urlset_nr = remote->pushurl_nr;
> } else {
> + if (save_to_push) {
> + if (remote->url_nr != 1)
> + die(_("--save-to-push can only be used when only one url is defined"), remotename);
Unused parameter "remotename" is fed to die(). I'll drop this.
> +
> + strbuf_addf(&name_buf, "remote.%s.pushurl", remotename);
> + git_config_set_multivar(name_buf.buf,
> + remote->url[0], "^$", 0);
> + strbuf_reset(&name_buf);
> + }
> +
> strbuf_addf(&name_buf, "remote.%s.url", remotename);
> urlset = remote->url;
> urlset_nr = remote->url_nr;
> diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
> index d2a2cdd453..434c1f828a 100755
> --- a/t/t5505-remote.sh
> +++ b/t/t5505-remote.sh
> @@ -1194,6 +1194,17 @@ test_expect_success 'remote set-url --delete baz' '
> cmp expect actual
> '
>
> +test_expect_success 'remote set-url --save-to-push bbb' '
> + git remote set-url --save-to-push someremote bbb &&
> + echo bbb >expect &&
> + echo "YYY" >>expect &&
> + echo ccc >>expect &&
> + git config --get-all remote.someremote.url >actual &&
> + echo "YYY" >>actual &&
> + git config --get-all remote.someremote.pushurl >>actual &&
> + cmp expect actual
> +'
> +
> test_expect_success 'extra args: setup' '
> # add a dummy origin so that this does not trigger failure
> git remote add origin .
next prev parent reply other threads:[~2018-11-13 9:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-27 8:09 [RFC PATCH] remote: add --fetch option to git remote set-url Denton Liu
2018-10-29 5:57 ` Junio C Hamano
2018-10-30 7:56 ` Denton Liu
2018-10-30 10:11 ` Junio C Hamano
2018-11-09 2:37 ` [RFC PATCH v2] remote: add --save-push " Denton Liu
2018-11-09 3:15 ` Junio C Hamano
2018-11-09 5:20 ` [PATCH v3] remote: add --save-to-push " Denton Liu
2018-11-13 9:46 ` Junio C Hamano [this message]
2018-12-10 14:15 ` [PATCH v4] " Denton Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqy39xux6n.fsf@gitster-ct.c.googlers.com \
--to=gitster@pobox.com \
--cc=anmolmago@gmail.com \
--cc=briankyho@gmail.com \
--cc=david.lu97@outlook.com \
--cc=git@vger.kernel.org \
--cc=liu.denton@gmail.com \
--cc=shirui.wang@hotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).