mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
Merge pull request #10507 from atom/handle-broken-submodules
Handle broken submodules
This commit is contained in:
@@ -37,8 +37,11 @@ export default class GitRepositoryAsync {
|
||||
this.emitter = new Emitter()
|
||||
this.subscriptions = new CompositeDisposable()
|
||||
this.pathStatusCache = {}
|
||||
// NB: This needs to happen before the following .openRepository call.
|
||||
|
||||
// NB: These needs to happen before the following .openRepository call.
|
||||
this.openedPath = _path
|
||||
this._openExactPath = options.openExactPath || false
|
||||
|
||||
this.repoPromise = this.openRepository()
|
||||
this.isCaseInsensitive = fs.isCaseInsensitive()
|
||||
this.upstream = {}
|
||||
@@ -848,22 +851,30 @@ export default class GitRepositoryAsync {
|
||||
|
||||
const submodule = await Git.Submodule.lookup(repo, name)
|
||||
const absolutePath = path.join(repo.workdir(), submodule.path())
|
||||
const submoduleRepo = GitRepositoryAsync.open(absolutePath)
|
||||
const submoduleRepo = GitRepositoryAsync.open(absolutePath, {openExactPath: true, refreshOnWindowFocus: false})
|
||||
this.submodules[name] = submoduleRepo
|
||||
}
|
||||
|
||||
for (const name in this.submodules) {
|
||||
if (submoduleNames.indexOf(name) < 0) {
|
||||
const repo = this.submodules[name]
|
||||
const repo = this.submodules[name]
|
||||
const gone = submoduleNames.indexOf(name) < 0
|
||||
if (gone) {
|
||||
repo.destroy()
|
||||
delete this.submodules[name]
|
||||
} else {
|
||||
try {
|
||||
await repo.refreshStatus()
|
||||
} catch (e) {
|
||||
// libgit2 will sometimes report submodules that aren't actually valid
|
||||
// (https://github.com/libgit2/libgit2/issues/3580). So check the
|
||||
// validity of the submodules by removing any that fail.
|
||||
repo.destroy()
|
||||
delete this.submodules[name]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const submoduleRepos = _.values(this.submodules)
|
||||
await Promise.all(submoduleRepos.map(s => s.refreshStatus()))
|
||||
|
||||
return submoduleRepos
|
||||
return _.values(this.submodules)
|
||||
}
|
||||
|
||||
// Get the status for the submodules in the repository.
|
||||
@@ -969,7 +980,11 @@ export default class GitRepositoryAsync {
|
||||
//
|
||||
// Returns the new {NodeGit.Repository}.
|
||||
openRepository () {
|
||||
return Git.Repository.openExt(this.openedPath, 0, '')
|
||||
if (this._openExactPath) {
|
||||
return Git.Repository.open(this.openedPath)
|
||||
} else {
|
||||
return Git.Repository.openExt(this.openedPath, 0, '')
|
||||
}
|
||||
}
|
||||
|
||||
// Section: Private
|
||||
|
||||
Reference in New Issue
Block a user