Mercurial > hg-stable
changeset 16243:b9c4302310e5 stable
localrepo: fix unpushable repos when using bookmarks (issue3317)
bookmarks is copied to journal.bookmarks differently from how dirstate is
copied to journal.dirstate. The different way is less robust, which can render
the repo unpushable by other users if the first pushing user aborts their
transaction.
The underlying cause is that the copyfile method attempts an unnecessary chmod,
which fails if the user is not the owner of the journal.bookmarks file.
This patch makes the bookmarks journaling more consistent with the rest of the
journaling, and will allow users to update lingering journal.bookmarks files
that they're not the owners of.
author | Michael Bacarella <mbacarella@janestreet.com> |
---|---|
date | Fri, 09 Mar 2012 15:34:21 -0500 |
parents | 55174ab81973 |
children | 3d26d69ef822 |
files | mercurial/localrepo.py |
diffstat | 1 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Mon Mar 12 09:39:30 2012 +0100 +++ b/mercurial/localrepo.py Fri Mar 09 15:34:21 2012 -0500 @@ -772,11 +772,12 @@ self.opener.write("journal.desc", "%d\n%s\n" % (len(self), desc)) - bkname = self.join('bookmarks') - if os.path.exists(bkname): - util.copyfile(bkname, self.join('journal.bookmarks')) - else: - self.opener.write('journal.bookmarks', '') + try: + bk = self.opener.read("bookmarks") + except IOError: + bk = "" + self.opener.write("journal.bookmarks", bk) + phasesname = self.sjoin('phaseroots') if os.path.exists(phasesname): util.copyfile(phasesname, self.sjoin('journal.phaseroots'))