Karl Fogel <kfogel@newton.ch.collab.net> writes:
> > Index: tools/backup/hot-backup.py
> > ===================================================================
> > --- tools/backup/hot-backup.py (revision 4111)
> > +++ tools/backup/hot-backup.py (working copy)
> > @@ -77,6 +77,15 @@
> > # Step 2: copy the whole repository structure.
> >
> > backup_subdir = os.path.join(backup_dir, repo + "-" + youngest)
> > +
> > +# if there is backup already, add additional
> > +# increment at the end of path
> > +try_count = 1
> > +while os.path.exists(backup_subdir):
> > + backup_subdir = os.path.join(backup_dir, repo + "-" + youngest + "-" + `try_count`)
> > + try_count += 1
> > +
> > +
> > print "Backing up repository to '" + backup_subdir + "'..."
> > shutil.copytree(repo_dir, backup_subdir)
> > print "Done."
I don't understand why one would want multiple backups of the same
revison, particularly if they are in directories with arbitrary names.
However looking at the patch I see a race in the existing code when
used a a post-commit hook. A post-commit script runs asynchronously,
so it cannot assume that the repository has not changed since the
commit that triggered the script. Consider the following
1. Commit X completes and triggers the 'X' run of the post-commit.
2. Commit Y completes and triggers the 'Y' run of the post-commit.
3. The 'X' post-commit starts.
4. The 'Y' post-commit starts.
5. The 'X' post-commit completes, but backs-up Y since that HEAD.
6. The 'Y' post-commit will now do
shutil.copytree(repo_dir, backup_subdir)
but backup_subdir already exists and contains a backup of Y.
--
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Dec 15 22:10:16 2002