From: Junio C Hamano <gitster@pobox.com>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: <git@vger.kernel.org>, Phillip Wood <phillip.wood123@gmail.com>
Subject: Re: [PATCH v5 3/4] builtin/stash: provide a way to export stashes to a ref
Date: Fri, 09 May 2025 12:31:11 -0700 [thread overview]
Message-ID: <xmqqecwx1szk.fsf@gitster.g> (raw)
In-Reply-To: <20250508234458.3665894-4-sandals@crustytoothpaste.net> (brian m. carlson's message of "Thu, 8 May 2025 23:44:56 +0000")
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
> +static int do_export_stash(struct repository *r,
> + const char *ref,
> + int argc,
> + const char **argv)
> +{
> +...
> + if (argc) {
> + /*
> + * Find each specified stash, and load data into the array.
> + */
> + for (i = 0; i < argc; i++) {
> + struct object_id oid;
> + if (parse_revision(&revision, argv[i], 1) ||
> + get_oid_with_context(r, revision.buf,
> + GET_OID_QUIETLY | GET_OID_GENTLY,
> + &oid, &unused)) {
> + res = error(_("unable to find stash entry %s"), argv[i]);
> + goto out;
> + }
> + oid_array_append(&items, &oid);
> + }
Grabbing individual reflog entry given on the command line looks
trivial, but ...
> + } else {
> + /*
> + * Walk the reflog, finding each stash entry, and load data into the
> + * array.
> + */
> + for (i = 0;; i++) {
> + char buf[32];
> + struct object_id oid;
> +
> + snprintf(buf, sizeof(buf), "%d", i);
> + if (parse_revision(&revision, buf, 1) ||
> + get_oid_with_context(r, revision.buf,
> + GET_OID_QUIETLY | GET_OID_GENTLY,
> + &oid, &unused))
> + break;
> + oid_array_append(&items, &oid);
> + }
... have you considered reusing reflog-walk.c:read_complete_reflog()
as a helper function?
Doing so of would be more efficient than going from int to string
back to int to call read_ref_at() and iterate over the same reflog
entries with refs_for_each_reflog_ent().
> + }
> +
> + /*
> + * Now, create a set of commits identical to the regular stash commits,
> + * but where their first parents form a chain to our original empty
> + * base commit.
> + */
> + for (i = items.nr - 1; i >= 0; i--) {
> + struct commit_list *parents = NULL;
> + struct commit_list **next = &parents;
> + struct object_id out;
> + const struct object_id *oid = items.oid + i;
> +
> + next = commit_list_append(prev, next);
> + next = commit_list_append(lookup_commit_reference(r, oid), next);
The individual-reflog-entry mode above was fairly strict in that a
list of reflog entries with even one unreadable commit caused the
whole command to fail, but reflog-walk mode assumed that a failure
to read an entry must always be due to reflog entries running out
due to the index incremented to a large enough number. I suspect
get_oid_with_context() can give you oid obtained out of a reflog
entry without actually parsing the object or checking if it exists.
Should we be a bit more defensinve here in lookup_commit_reference()
call, which would silently throw a NULL back at us if the commit
cannot be found without complaining?
next prev parent reply other threads:[~2025-05-09 19:31 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-08 23:44 [PATCH v5 0/4] Importing and exporting stashes to refs brian m. carlson
2025-05-08 23:44 ` [PATCH v5 1/4] object-name: make get_oid quietly return an error brian m. carlson
2025-05-09 1:55 ` Junio C Hamano
2025-05-09 19:50 ` brian m. carlson
2025-05-08 23:44 ` [PATCH v5 2/4] builtin/stash: factor out revision parsing into a function brian m. carlson
2025-05-09 15:27 ` Junio C Hamano
2025-05-08 23:44 ` [PATCH v5 3/4] builtin/stash: provide a way to export stashes to a ref brian m. carlson
2025-05-09 16:38 ` Junio C Hamano
2025-05-09 19:31 ` Junio C Hamano [this message]
2025-05-10 21:24 ` Jeff King
2025-05-12 9:10 ` Phillip Wood
2025-05-12 15:53 ` Junio C Hamano
2025-05-08 23:44 ` [PATCH v5 4/4] builtin/stash: provide a way to import stashes from " brian m. carlson
2025-05-09 19:54 ` Junio C Hamano
2025-05-11 23:44 ` brian m. carlson
2025-05-10 17:21 ` Jeff King
2025-05-12 12:42 ` Junio C Hamano
2025-05-12 12:58 ` Jeff King
2025-05-12 16:05 ` Junio C Hamano
2025-05-12 21:19 ` brian m. carlson
2025-05-10 21:33 ` Jeff King
2025-05-12 9:10 ` Phillip Wood
2025-05-09 1:10 ` [PATCH v5 0/4] Importing and exporting stashes to refs Junio C Hamano
2025-05-09 20:16 ` brian m. carlson
2025-05-09 16:53 ` D. Ben Knoble
2025-05-09 20:15 ` brian m. carlson
2025-05-10 19:13 ` D. Ben Knoble
2025-05-22 18:55 ` [PATCH] Makefile: avoid constant rebuilds with compilation database brian m. carlson
2025-05-22 18:55 ` [PATCH v6 0/5] Importing and exporting stashes to refs brian m. carlson
2025-06-01 22:32 ` [PATCH v7 0/4] " brian m. carlson
2025-06-01 22:32 ` [PATCH v7 1/4] object-name: make get_oid quietly return an error brian m. carlson
2025-06-01 22:32 ` [PATCH v7 2/4] builtin/stash: factor out revision parsing into a function brian m. carlson
2025-06-01 22:32 ` [PATCH v7 3/4] builtin/stash: provide a way to export stashes to a ref brian m. carlson
2025-06-05 9:25 ` Phillip Wood
2025-06-11 11:31 ` Kristoffer Haugsbakk
2025-06-11 23:35 ` brian m. carlson
2025-06-01 22:32 ` [PATCH v7 4/4] builtin/stash: provide a way to import stashes from " brian m. carlson
2025-06-05 9:38 ` [PATCH v7 0/4] Importing and exporting stashes to refs Phillip Wood
2025-06-12 1:12 ` [PATCH v8 " brian m. carlson
2025-06-12 1:12 ` [PATCH v8 1/4] object-name: make get_oid quietly return an error brian m. carlson
2025-06-12 1:12 ` [PATCH v8 2/4] builtin/stash: factor out revision parsing into a function brian m. carlson
2025-06-12 1:12 ` [PATCH v8 3/4] builtin/stash: provide a way to export stashes to a ref brian m. carlson
2025-06-12 1:12 ` [PATCH v8 4/4] builtin/stash: provide a way to import stashes from " brian m. carlson
2025-06-25 8:40 ` [PATCH v8 0/4] Importing and exporting stashes to refs Phillip Wood
2025-06-25 16:30 ` Junio C Hamano
2025-05-22 18:55 ` [PATCH v6 1/5] object-name: make get_oid quietly return an error brian m. carlson
2025-05-22 19:27 ` Junio C Hamano
2025-05-22 18:55 ` [PATCH v6 2/5] reflog-walk: expose read_complete_reflog brian m. carlson
2025-05-22 21:53 ` Ramsay Jones
2025-05-23 23:22 ` brian m. carlson
2025-05-24 1:09 ` Ramsay Jones
2025-05-26 19:55 ` brian m. carlson
2025-05-29 16:01 ` Phillip Wood
2025-05-29 21:59 ` Junio C Hamano
2025-05-22 18:55 ` [PATCH v6 3/5] builtin/stash: factor out revision parsing into a function brian m. carlson
2025-05-22 20:34 ` Junio C Hamano
2025-05-23 23:25 ` brian m. carlson
2025-05-24 0:23 ` Junio C Hamano
2025-05-26 19:36 ` brian m. carlson
2025-05-22 18:55 ` [PATCH v6 4/5] builtin/stash: provide a way to export stashes to a ref brian m. carlson
2025-05-22 20:51 ` Junio C Hamano
2025-05-26 19:42 ` brian m. carlson
2025-05-29 16:01 ` Phillip Wood
2025-05-22 18:55 ` [PATCH v6 5/5] builtin/stash: provide a way to import stashes from " brian m. carlson
2025-05-22 21:09 ` Junio C Hamano
2025-05-26 20:03 ` brian m. carlson
2025-05-22 21:15 ` Junio C Hamano
2025-05-23 13:17 ` Phillip Wood
2025-05-22 19:00 ` [PATCH] Makefile: avoid constant rebuilds with compilation database brian m. carlson
2025-05-22 19:08 ` Junio C Hamano
2025-06-11 11:35 ` [PATCH v5 0/4] Importing and exporting stashes to refs Kristoffer Haugsbakk
2025-06-12 0:45 ` brian m. carlson
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=xmqqecwx1szk.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=phillip.wood123@gmail.com \
--cc=sandals@crustytoothpaste.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.