From: Jeff King <peff@peff.net>
To: Harald Nordgren <haraldnordgren@gmail.com>
Cc: git@vger.kernel.org, avarab@gmail.com, gitster@pobox.com,
sunshine@sunshineco.com
Subject: Re: [PATCH v7] ls-remote: create '--sort' option
Date: Wed, 4 Apr 2018 14:55:19 -0400 [thread overview]
Message-ID: <20180404185518.GD9055@sigill.intra.peff.net> (raw)
In-Reply-To: <20180404171153.4126-1-haraldnordgren@gmail.com>
On Wed, Apr 04, 2018 at 07:11:53PM +0200, Harald Nordgren wrote:
> @@ -60,6 +60,16 @@ OPTIONS
> upload-pack only shows the symref HEAD, so it will be the only
> one shown by ls-remote.
>
> +--sort=<key>::
> + Sort based on the key given. Prefix `-` to sort in
> + descending order of the value. You may use the --sort=<key> option
> + multiple times, in which case the last key becomes the primary
> + key. Also supports "version:refname" or "v:refname" (tag
> + names are treated as versions). The "version:refname" sort
> + order can also be affected by the "versionsort.suffix"
> + configuration variable.
> + The keys supported are the same as those in `git for-each-ref`.
We probably ought to warn the user in that final sentence that keys
which actually look at the objects may not work, since we don't
necessarily have the objects.
There's one other subtlety, which is that things like %(HEAD) assume
we're talking about local refs, not the remote HEAD. So that wouldn't
work (of course it seems unlikely that anybody woudl _sort_ on that).
> @@ -104,13 +112,28 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
> if (!dest && !quiet)
> fprintf(stderr, "From %s\n", *remote->url);
> for ( ; ref; ref = ref->next) {
> + struct ref_array_item *item;
> if (!check_ref_type(ref, flags))
> continue;
> if (!tail_match(pattern, ref->name))
> continue;
> +
> + FLEX_ALLOC_MEM(item, refname, ref->name, strlen(ref->name));
I think this can use the slightly-simpler FLEX_ALLOC_STR().
> + item->symref = ref->symref;
Normally a ref_array_item's symref is an allocated string owned by the
item. I don't think it actually matters now, but in the spirit of
least-surprise for the future, should this be xstrdup_or_null(ref->symref)?
> + item->objectname = ref->old_oid;
This is actually a struct assignment. Which does work, but our usual
mechanism would be to use "oidcpy(&item->objectname, &ref->old_oid)".
All of this might be a little nicer if ref-filter provided a function to
allocate a new item. We're pushing the boundaries of ref-filter was
meant to be used here, as it was assumed you'd always start with a call
to filter_refs().
> + ALLOC_GROW(array.items, array.nr + 1, array.alloc);
> + array.items[array.nr++] = item;
The existing ref-filter code fails to use ALLOC_GROW() correctly. I
don't think it actually matters, since we don't intermingle this with
allocations done there. But perhaps we should be fixing that one while
we're looking at it. Or again, maybe it would be nicer still if there
were a ref-filter function to do this, and the whole call here could
just be:
ref_array_push(&array, ref->name, &ref->old_oid);
One more drastic alternative is to actually use the existing
filter_refs(), and just teach it to populate the array from a list of
refs. As you can see from its implementation, it does a few other setup
steps. I don't think they matter now, but if you eventually wanted to be
able to do "git ls-remote --contains HEAD", you'd need that setup.
-Peff
next prev parent reply other threads:[~2018-04-04 18:55 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-02 0:52 [PATCH] ls-remote: create option to sort by versions Harald Nordgren
2018-04-02 6:37 ` Ævar Arnfjörð Bjarmason
2018-04-02 16:26 ` Harald Nordgren
2018-04-02 17:32 ` Ævar Arnfjörð Bjarmason
2018-04-02 17:42 ` Harald Nordgren
2018-04-02 17:46 ` Jeff King
2018-04-02 18:32 ` Junio C Hamano
2018-04-02 20:03 ` Harald Nordgren
2018-04-02 22:11 ` [PATCH v5] ls-remote: create '--sort' option Harald Nordgren
2018-04-02 22:53 ` Eric Sunshine
2018-04-02 22:54 ` Eric Sunshine
2018-04-03 0:48 ` [PATCH v6] " Harald Nordgren
2018-04-02 21:05 ` [PATCH v4] " Harald Nordgren
2018-04-04 17:11 ` [PATCH v7] " Harald Nordgren
2018-04-04 17:18 ` Harald Nordgren
2018-04-04 17:47 ` Harald Nordgren
2018-04-04 18:56 ` Jeff King
2018-04-04 18:55 ` Jeff King [this message]
2018-04-04 23:01 ` [PATCH v8] " Harald Nordgren
2018-04-04 23:11 ` Harald Nordgren
2018-04-06 18:58 ` Jeff King
2018-04-06 18:58 ` [PATCH 1/3] ref-filter: use "struct object_id" consistently Jeff King
2018-04-06 18:59 ` [PATCH 2/3] ref-filter: make ref_array_item allocation more consistent Jeff King
2018-04-06 18:59 ` [PATCH 3/3] ref-filter: factor ref_array pushing into its own function Jeff King
2018-04-06 19:27 ` Derrick Stolee
2018-04-07 15:22 ` Harald Nordgren
2018-04-08 23:18 ` Junio C Hamano
2018-04-09 3:57 ` Jeff King
2018-04-04 23:32 ` [PATCH v9] ls-remote: create '--sort' option Harald Nordgren
2018-04-05 0:04 ` [PATCH v10] " Harald Nordgren
2018-04-07 16:42 ` [PATCH v11 1/4] ref-filter: use "struct object_id" consistently Harald Nordgren
2018-04-08 1:06 ` Eric Sunshine
2018-04-08 12:27 ` Harald Nordgren
2018-04-07 16:42 ` [PATCH v11 2/4] ref-filter: make ref_array_item allocation more consistent Harald Nordgren
2018-04-07 16:42 ` [PATCH v11 3/4] ref-filter: factor ref_array pushing into its own function Harald Nordgren
2018-04-07 16:42 ` [PATCH v11 4/4] ls-remote: create '--sort' option Harald Nordgren
2018-04-08 1:48 ` Eric Sunshine
2018-04-08 12:28 ` [PATCH v12 1/4] ref-filter: use "struct object_id" consistently Harald Nordgren
2018-04-08 12:28 ` [PATCH v12 2/4] ref-filter: make ref_array_item allocation more consistent Harald Nordgren
2018-04-08 12:28 ` [PATCH v12 3/4] ref-filter: factor ref_array pushing into its own function Harald Nordgren
2018-04-08 12:28 ` [PATCH v12 4/4] ls-remote: create '--sort' option Harald Nordgren
2018-04-08 22:16 ` Junio C Hamano
2018-04-09 0:09 ` Harald Nordgren
2018-04-09 0:48 ` Junio C Hamano
2018-04-09 2:31 ` Eric Sunshine
2018-04-08 23:58 ` [PATCH v13 1/4] ref-filter: use "struct object_id" consistently Harald Nordgren
2018-04-08 23:58 ` [PATCH v13 2/4] ref-filter: make ref_array_item allocation more consistent Harald Nordgren
2018-04-08 23:58 ` [PATCH v13 3/4] ref-filter: factor ref_array pushing into its own function Harald Nordgren
2018-04-08 23:58 ` [PATCH v13 4/4] ls-remote: create '--sort' option Harald Nordgren
2018-04-09 0:56 ` Junio C Hamano
2018-04-09 1:45 ` Harald Nordgren
2018-04-09 1:42 ` [PATCH v14 1/4] ref-filter: use "struct object_id" consistently Harald Nordgren
2018-04-09 1:42 ` [PATCH v14 2/4] ref-filter: make ref_array_item allocation more consistent Harald Nordgren
2018-04-11 17:57 ` Harald Nordgren
2018-04-11 18:07 ` Stefan Beller
2018-04-11 18:30 ` Todd Zullinger
2018-04-11 18:56 ` Eric Sunshine
2018-04-11 23:25 ` Junio C Hamano
2018-04-09 1:42 ` [PATCH v14 3/4] ref-filter: factor ref_array pushing into its own function Harald Nordgren
2018-04-09 1:42 ` [PATCH v14 4/4] ls-remote: create '--sort' option Harald Nordgren
2018-05-12 8:45 ` René Scharfe
2018-05-12 9:55 ` Jeff King
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180404185518.GD9055@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=haraldnordgren@gmail.com \
--cc=sunshine@sunshineco.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.
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 NNTP newsgroup(s).