threads / bug / 54212

Possible bug: --shallow-since and old branches

Subject: Possible bug: --shallow-since and old branches

## tl;dr

One message between Sep 8, 2020 and Sep 8, 2020.

replies: 0people: 1as markdown or json

Tao Klerks· Sep 8, 2020, 19:58 UTC · lore
Hi folks,

I've encountered very strange behavior when fetching a repo with --shallow-since, where I get many more commits than I expect in the repo, and specifically when I count commits by branch I see old branches where *every* commit is beyond the specified date threshold.

I found a thread from 2018 in which something like this is discussed (https://public-inbox.org/git/20180522194854.GA29564@inner.h.apk.li/), but I haven't completely understood the thread. It seems to address the specific "repo would be empty" concern, but not necessarily the more general "I'm getting branches I shouldn't be getting" concern/case...?

I can confirm that if I move my --shallow-since date to one that "intersects" the lifetime of a branch I am unexpectedly getting, then all of a sudden I only get those commits I expected on that branch.

I can also confirm that in a recent version of git (since 2.16 I think), if I set my refspec so *only* a "too old" branch matches, then I get the "fatal: no commits selected for shallow requests" error that's expected. But if my refspec *also* matches a branch that *does* have commits newer than the threshold, then I get the correct (newer) commits of that recently-active branch, and *all* commits of the too-old branch that otherwise correctly refuses to fetch on its own.

I *thought* I would be able get what I would have expected from a
"--shallow-since" clone by:
 * Initializing a new repo
 * Adding the remote
 * Removing the default fetch refspec
 * Iterating remote heads, checking their commit dates, and adding
those valid/recent heads explicitly to the fetch refspec
 * Doing a fetch with  "--shallow-since"

... however, I seem to have assumed some magic there: getting the "most recent commit date" for a remote ref apparently requires fetching it (to a depth of 1 at least) first??

Is the behavior I'm seeing "as designed" for branches with no recent commits, or is there a problem somewhere?

Best regards, Tao

← back to recent threads