diff options
author | Shawn O. Pearce <sop@google.com> | 2008-11-04 07:37:10 -0800 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2008-11-05 18:08:32 -0800 |
commit | e284ad1d1a2c6fa0e0ac800e87b2607f9bda339e (patch) | |
tree | fcf35ac784ec2e13c78ee3882ccb1fec0ad3d049 /project.py | |
parent | 3e5481999d5f853e19ee5caaaaa968fc4b5176ab (diff) | |
download | git-repo-e284ad1d1a2c6fa0e0ac800e87b2607f9bda339e.tar.gz |
Add 'repo init --mirror' to download a complete forrestv1.1
The mirror option downloads a complete forrest (as described by the
manifest) and creates a replica of the remote repositories rather
than a client working directory. This permits other clients to
sync off the mirror site.
A mirror can be positioned in a "DMZ", where the mirror executes
"repo sync" to obtain changes from the external upstream and
clients inside the protected zone operate off the mirror only,
and therefore do not require direct git:// access to the external
upstream repositories.
Signed-off-by: Shawn O. Pearce <sop@google.com>
Diffstat (limited to 'project.py')
-rw-r--r-- | project.py | 36 |
1 files changed, 29 insertions, 7 deletions
@@ -211,7 +211,10 @@ class Project(object): | |||
211 | gitdir = self.gitdir, | 211 | gitdir = self.gitdir, |
212 | defaults = self.manifest.globalConfig) | 212 | defaults = self.manifest.globalConfig) |
213 | 213 | ||
214 | self.work_git = self._GitGetByExec(self, bare=False) | 214 | if self.worktree: |
215 | self.work_git = self._GitGetByExec(self, bare=False) | ||
216 | else: | ||
217 | self.work_git = None | ||
215 | self.bare_git = self._GitGetByExec(self, bare=True) | 218 | self.bare_git = self._GitGetByExec(self, bare=True) |
216 | 219 | ||
217 | @property | 220 | @property |
@@ -489,14 +492,23 @@ class Project(object): | |||
489 | print >>sys.stderr | 492 | print >>sys.stderr |
490 | print >>sys.stderr, 'Initializing project %s ...' % self.name | 493 | print >>sys.stderr, 'Initializing project %s ...' % self.name |
491 | self._InitGitDir() | 494 | self._InitGitDir() |
495 | |||
492 | self._InitRemote() | 496 | self._InitRemote() |
493 | for r in self.extraRemotes.values(): | 497 | for r in self.extraRemotes.values(): |
494 | if not self._RemoteFetch(r.name): | 498 | if not self._RemoteFetch(r.name): |
495 | return False | 499 | return False |
496 | if not self._RemoteFetch(): | 500 | if not self._RemoteFetch(): |
497 | return False | 501 | return False |
498 | self._RepairAndroidImportErrors() | 502 | |
499 | self._InitMRef() | 503 | if self.worktree: |
504 | self._RepairAndroidImportErrors() | ||
505 | self._InitMRef() | ||
506 | else: | ||
507 | self._InitMirrorHead() | ||
508 | try: | ||
509 | os.remove(os.path.join(self.gitdir, 'FETCH_HEAD')) | ||
510 | except OSError: | ||
511 | pass | ||
500 | return True | 512 | return True |
501 | 513 | ||
502 | def PostRepoUpgrade(self): | 514 | def PostRepoUpgrade(self): |
@@ -792,9 +804,11 @@ class Project(object): | |||
792 | def _RemoteFetch(self, name=None): | 804 | def _RemoteFetch(self, name=None): |
793 | if not name: | 805 | if not name: |
794 | name = self.remote.name | 806 | name = self.remote.name |
795 | return GitCommand(self, | 807 | cmd = ['fetch'] |
796 | ['fetch', name], | 808 | if not self.worktree: |
797 | bare = True).Wait() == 0 | 809 | cmd.append('--update-head-ok') |
810 | cmd.append(name) | ||
811 | return GitCommand(self, cmd, bare = True).Wait() == 0 | ||
798 | 812 | ||
799 | def _Checkout(self, rev, quiet=False): | 813 | def _Checkout(self, rev, quiet=False): |
800 | cmd = ['checkout'] | 814 | cmd = ['checkout'] |
@@ -874,7 +888,10 @@ class Project(object): | |||
874 | remote.url = url | 888 | remote.url = url |
875 | remote.review = self.remote.reviewUrl | 889 | remote.review = self.remote.reviewUrl |
876 | 890 | ||
877 | remote.ResetFetch() | 891 | if self.worktree: |
892 | remote.ResetFetch(mirror=False) | ||
893 | else: | ||
894 | remote.ResetFetch(mirror=True) | ||
878 | remote.Save() | 895 | remote.Save() |
879 | 896 | ||
880 | for r in self.extraRemotes.values(): | 897 | for r in self.extraRemotes.values(): |
@@ -897,6 +914,11 @@ class Project(object): | |||
897 | dst = remote.ToLocal(self.revision) | 914 | dst = remote.ToLocal(self.revision) |
898 | self.bare_git.symbolic_ref('-m', msg, ref, dst) | 915 | self.bare_git.symbolic_ref('-m', msg, ref, dst) |
899 | 916 | ||
917 | def _InitMirrorHead(self): | ||
918 | dst = self.GetRemote(self.remote.name).ToLocal(self.revision) | ||
919 | msg = 'manifest set to %s' % self.revision | ||
920 | self.bare_git.SetHead(dst, message=msg) | ||
921 | |||
900 | def _InitWorkTree(self): | 922 | def _InitWorkTree(self): |
901 | dotgit = os.path.join(self.worktree, '.git') | 923 | dotgit = os.path.join(self.worktree, '.git') |
902 | if not os.path.exists(dotgit): | 924 | if not os.path.exists(dotgit): |