view hg @ 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 659f34b833b9
children 73e4a02e6d23
line wrap: on
line source

#!/usr/bin/env python
#
# mercurial - scalable distributed SCM
#
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

import os
import sys

libdir = '@LIBDIR@'

if libdir != '@' 'LIBDIR' '@':
    if not os.path.isabs(libdir):
        libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                              libdir)
        libdir = os.path.abspath(libdir)
    sys.path.insert(0, libdir)

# enable importing on demand to reduce startup time
try:
    from mercurial import demandimport; demandimport.enable()
except ImportError:
    import sys
    sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" %
                     ' '.join(sys.path))
    sys.stderr.write("(check your install and PYTHONPATH)\n")
    sys.exit(-1)

import mercurial.util
import mercurial.dispatch

for fp in (sys.stdin, sys.stdout, sys.stderr):
    mercurial.util.setbinary(fp)

mercurial.dispatch.run()