340 create = False |
340 create = False |
341 if not os.path.exists(os.path.join(root, '.hg')): |
341 if not os.path.exists(os.path.join(root, '.hg')): |
342 create = True |
342 create = True |
343 util.makedirs(root) |
343 util.makedirs(root) |
344 self._repo = hg.repository(r.ui, root, create=create) |
344 self._repo = hg.repository(r.ui, root, create=create) |
345 self._repo._subparent = r |
345 self._initrepo(r, state[0], create) |
346 self._repo._subsource = state[0] |
346 |
|
347 def _initrepo(self, parentrepo, source, create): |
|
348 self._repo._subparent = parentrepo |
|
349 self._repo._subsource = source |
347 |
350 |
348 if create: |
351 if create: |
349 fp = self._repo.opener("hgrc", "w", text=True) |
352 fp = self._repo.opener("hgrc", "w", text=True) |
350 fp.write('[paths]\n') |
353 fp.write('[paths]\n') |
351 |
354 |
429 def _get(self, state): |
432 def _get(self, state): |
430 source, revision, kind = state |
433 source, revision, kind = state |
431 if revision not in self._repo: |
434 if revision not in self._repo: |
432 self._repo._subsource = source |
435 self._repo._subsource = source |
433 srcurl = _abssource(self._repo) |
436 srcurl = _abssource(self._repo) |
434 self._repo.ui.status(_('pulling subrepo %s from %s\n') |
|
435 % (subrelpath(self), srcurl)) |
|
436 other = hg.repository(self._repo.ui, srcurl) |
437 other = hg.repository(self._repo.ui, srcurl) |
437 self._repo.pull(other) |
438 if len(self._repo) == 0: |
|
439 self._repo.ui.status(_('cloning subrepo %s from %s\n') |
|
440 % (subrelpath(self), srcurl)) |
|
441 parentrepo = self._repo._subparent |
|
442 shutil.rmtree(self._repo.root) |
|
443 other, self._repo = hg.clone(self._repo._subparent.ui, other, |
|
444 self._repo.root, update=False) |
|
445 self._initrepo(parentrepo, source, create=True) |
|
446 else: |
|
447 self._repo.ui.status(_('pulling subrepo %s from %s\n') |
|
448 % (subrelpath(self), srcurl)) |
|
449 self._repo.pull(other) |
438 bookmarks.updatefromremote(self._repo.ui, self._repo, other) |
450 bookmarks.updatefromremote(self._repo.ui, self._repo, other) |
439 |
451 |
440 def get(self, state, overwrite=False): |
452 def get(self, state, overwrite=False): |
441 self._get(state) |
453 self._get(state) |
442 source, revision, kind = state |
454 source, revision, kind = state |