Skip to content

Conversation

@ttaylorr
Copy link
Contributor

This pull request uses #2536 and #2537 to fetch ref updates before migrating, when no explicit ref arguments are given.

When git lfs migrate import is given without an --include-ref or --exclude-ref flag, we assume that the user wants to migrate all local refs and ignore commits reachable by any remote refs. To do this, we call ls-remote for each remote that the repository has, and append the negation ^ operator to all remote refs before passing them to git-rev-list(1).

This works when the client has an up-to-date list of refs on all known remotes, but causes the migrator to fail (propagating an error from git-rev-list(1)) when it tries to negate a reference that the repository does not have present locally.

To fix this, we teach the migrator to first fetch all refs present so that they are valid arguments to pass to git-rev-list(1). This is only done when refs are not explicitly given as arguments.

~/g/my-repo (master) $ git lfs migrate import
migrate: Fetching remote refs: ...
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done

/cc @git-lfs/core
/cc @jonico: this fixes the bug with missing/outdated remote refs you showed me last week.

@ttaylorr ttaylorr added this to the v2.3.0 milestone Aug 29, 2017
@ttaylorr ttaylorr requested a review from technoweenie August 29, 2017 21:27
@ttaylorr ttaylorr merged commit 1a1c679 into master Aug 30, 2017
@ttaylorr ttaylorr deleted the migrate-fetch-ref-updates branch August 30, 2017 18:29
chrisd8088 added a commit to chrisd8088/git-lfs that referenced this pull request May 26, 2023
In commit 3129b9a of PR git-lfs#2537 the
"githistory" package was updated so the WithLogger global option
variable now required a *log.Logger argument instead of calling
log.NewLogger().  This was done so the "git lfs migrate" commands
could pass in a previously initialized logger to which the commands
had already written log messages; that change was introduced in
PR git-lfs#2538.

In the same commit of PR git-lfs#2537, a WithLoggerTo global option function
was added to preserve the existing behaviour.  However, this option
has never been utilized, and so to reduce unnecessary complexity
we just remove it now.

Note that the use of functional options in the Git LFS project
stems from PR git-lfs#2295 and is inspired by the design proposed in several
articles from 2014; see, for reference:

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
https://commandcenter.blogspot.com/2014/01/self-referential-functions-and-design.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants