Re: [PATCH 5/6] builtin/stash: provide a way to import stashes from a ref
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Mar 16, 2022, 21:50 UTC
- Message-ID
- <YjJbsowcAqMhIgDr@camp.crustytoothpaste.net>
- In-Reply-To
- <xmqqa6dpn70b.fsf@gitster.g>
On 2022-03-16 at 17:26:28, Junio C Hamano wrote:
Show 31 quoted lines
> > +static int do_import_stash(const char *rev)
> > +{
> > + struct object_id oid;
> > + size_t nitems = 0, nalloc = 0;
> > + struct stash_info *items = NULL;
> > + int res = 0;
> > +
> > + if (get_oid(rev, &oid))
> > + return error(_("not a valid revision: %s"), rev);
> > +
> > + /*
> > + * Walk the commit history, finding each stash entry, and load data into
> > + * the array.
> > + */
> > + for (size_t i = 0;; i++, nitems++) {
> > + int ret;
> > +
> > + if (nalloc <= i) {
> > + size_t new = nalloc * 3 / 2 + 5;
> > + items = xrealloc(items, new * sizeof(*items));
> > + nalloc = new;
> > + }
> > + memset(&items[i], 0, sizeof(*items));
> > + /* We want this to be quiet because it might not exist. */
> > + ret = get_stash_info_for_import(&items[i], &oid);
>
> The new helper function is not necessary; we can use vanilla
> get_stash_info() on the second parent to get the same information,
> and we do not really need to keep it in core. We can sanity check
> the shape of the imported stash entry right away and discard
> everything except for the commit object name.Yes, in the new approach, I think we can do that. We may still need the behavior which doesn't die on error, but I think we can centralize it.
-- brian m. carlson (he/him or they/them) Toronto, Ontario, CA