mirror of
https://github.com/facebook/sapling.git
synced 2024-10-04 13:57:13 +03:00
git: set repo.submodule early
Summary: This allows reposetup functions to detect if a repo is a submodule or not. Reviewed By: sggutier Differential Revision: D56481294 fbshipit-source-id: ef090233211bb86692b474f411b544d830927669
This commit is contained in:
parent
05a8a41812
commit
ccd336a931
@ -8,6 +8,7 @@ utilities for git support
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
|
import functools
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -83,14 +84,14 @@ def isgitpeer(repo):
|
|||||||
return isgitstore(repo)
|
return isgitstore(repo)
|
||||||
|
|
||||||
|
|
||||||
def createrepo(ui, url, destpath):
|
def createrepo(ui, url, destpath, submodule=None):
|
||||||
|
|
||||||
repo_config = ""
|
repo_config = ""
|
||||||
if url:
|
if url:
|
||||||
repo_config += "\n[paths]\ndefault = %s\n" % url
|
repo_config += "\n[paths]\ndefault = %s\n" % url
|
||||||
|
|
||||||
return setup_repository(
|
return setup_repository(
|
||||||
ui, destpath, create=True, initial_config=repo_config
|
ui, destpath, create=True, initial_config=repo_config, submodule=submodule
|
||||||
).local()
|
).local()
|
||||||
|
|
||||||
|
|
||||||
@ -117,7 +118,7 @@ def setup_repository(ui, path, create=False, initial_config=None, submodule=None
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def clone(ui, url, destpath=None, update=True, pullnames=None):
|
def clone(ui, url, destpath=None, update=True, pullnames=None, submodule=None):
|
||||||
"""Clone a git repo, then create a repo at dest backed by the git repo.
|
"""Clone a git repo, then create a repo at dest backed by the git repo.
|
||||||
update can be False, or True, or a node to update to.
|
update can be False, or True, or a node to update to.
|
||||||
- False: do not update, leave an empty working copy.
|
- False: do not update, leave an empty working copy.
|
||||||
@ -127,6 +128,7 @@ def clone(ui, url, destpath=None, update=True, pullnames=None):
|
|||||||
- None: use default refspecs set by configs.
|
- None: use default refspecs set by configs.
|
||||||
- []: do not fetch anything.
|
- []: do not fetch anything.
|
||||||
If url is empty, create the repo but do not add a remote.
|
If url is empty, create the repo but do not add a remote.
|
||||||
|
If submodule is set, it will be passed to `setup_repository`.
|
||||||
"""
|
"""
|
||||||
from . import hg
|
from . import hg
|
||||||
|
|
||||||
@ -155,7 +157,7 @@ def clone(ui, url, destpath=None, update=True, pullnames=None):
|
|||||||
|
|
||||||
with bindings.atexit.AtExit.rmtree(destpath):
|
with bindings.atexit.AtExit.rmtree(destpath):
|
||||||
try:
|
try:
|
||||||
repo = createrepo(ui, url, destpath)
|
repo = createrepo(ui, url, destpath, submodule=submodule)
|
||||||
ret = initgitbare(ui, repo.svfs.join("git"))
|
ret = initgitbare(ui, repo.svfs.join("git"))
|
||||||
if ret != 0:
|
if ret != 0:
|
||||||
raise error.Abort(_("git clone was not successful"))
|
raise error.Abort(_("git clone was not successful"))
|
||||||
@ -832,7 +834,7 @@ class Submodule:
|
|||||||
repopath = self.gitmodulesvfs.join("gitmodules", urldigest)
|
repopath = self.gitmodulesvfs.join("gitmodules", urldigest)
|
||||||
ident = identity.sniffdir(repopath)
|
ident = identity.sniffdir(repopath)
|
||||||
if ident:
|
if ident:
|
||||||
repo = setup_repository(self.parentrepo.baseui, repopath)
|
repo = setup_repository(self.parentrepo.baseui, repopath, submodule=self)
|
||||||
else:
|
else:
|
||||||
# create the repo but do not fetch anything
|
# create the repo but do not fetch anything
|
||||||
repo = clone(
|
repo = clone(
|
||||||
@ -841,8 +843,8 @@ class Submodule:
|
|||||||
destpath=repopath,
|
destpath=repopath,
|
||||||
update=False,
|
update=False,
|
||||||
pullnames=[],
|
pullnames=[],
|
||||||
|
submodule=self,
|
||||||
)
|
)
|
||||||
repo.submodule = weakref.proxy(self)
|
|
||||||
self._inherit_git_config(repo)
|
self._inherit_git_config(repo)
|
||||||
return repo
|
return repo
|
||||||
|
|
||||||
@ -864,7 +866,7 @@ class Submodule:
|
|||||||
ident = identity.sniffdir(repopath)
|
ident = identity.sniffdir(repopath)
|
||||||
if ident:
|
if ident:
|
||||||
ui.debug(" initializing submodule workingcopy at %s\n" % repopath)
|
ui.debug(" initializing submodule workingcopy at %s\n" % repopath)
|
||||||
repo = setup_repository(self.parentrepo.baseui, repopath)
|
repo = setup_repository(self.parentrepo.baseui, repopath, submodule=self)
|
||||||
else:
|
else:
|
||||||
if self.parentrepo.wvfs.isfile(self.path):
|
if self.parentrepo.wvfs.isfile(self.path):
|
||||||
ui.debug(" unlinking conflicted submodule file at %s\n" % self.path)
|
ui.debug(" unlinking conflicted submodule file at %s\n" % self.path)
|
||||||
@ -876,9 +878,13 @@ class Submodule:
|
|||||||
% (repopath, backingrepo.root)
|
% (repopath, backingrepo.root)
|
||||||
)
|
)
|
||||||
repo = hg.share(
|
repo = hg.share(
|
||||||
backingrepo.ui, backingrepo.root, repopath, update=False, relative=True
|
backingrepo.ui,
|
||||||
|
backingrepo.root,
|
||||||
|
repopath,
|
||||||
|
update=False,
|
||||||
|
relative=True,
|
||||||
|
repository=functools.partial(setup_repository, submodule=self),
|
||||||
)
|
)
|
||||||
repo.submodule = weakref.proxy(self)
|
|
||||||
self._inherit_git_config(repo)
|
self._inherit_git_config(repo)
|
||||||
return repo
|
return repo
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user