Show More
@@ -1982,40 +1982,55 b' def handlepushkey(op, inpart):' | |||
|
1982 | 1982 | def handlebookmark(op, inpart): |
|
1983 | 1983 | """transmit bookmark information |
|
1984 | 1984 | |
|
1985 |
The part contains binary encoded bookmark information. |
|
|
1986 | information is applied as is to the unbundling repository. Make sure a | |
|
1987 | 'check:bookmarks' part is issued earlier to check for race condition in | |
|
1988 | such update. | |
|
1985 | The part contains binary encoded bookmark information. | |
|
1986 | ||
|
1987 | The exact behavior of this part can be controlled by the 'bookmarks' mode | |
|
1988 | on the bundle operation. | |
|
1989 | 1989 | |
|
1990 | This behavior is suitable for pushing. Semantic adjustment will be needed | |
|
1991 | for pull. | |
|
1990 | When mode is 'apply' (the default) the bookmark information is applied as | |
|
1991 | is to the unbundling repository. Make sure a 'check:bookmarks' part is | |
|
1992 | issued earlier to check for push races in such update. This behavior is | |
|
1993 | suitable for pushing. | |
|
1994 | ||
|
1995 | When mode is 'records', the information is recorded into the 'bookmarks' | |
|
1996 | records of the bundle operation. This behavior is suitable for pulling. | |
|
1992 | 1997 | """ |
|
1993 | 1998 | changes = bookmarks.binarydecode(inpart) |
|
1994 | 1999 | |
|
1995 | tr = op.gettransaction() | |
|
1996 | bookstore = op.repo._bookmarks | |
|
2000 | pushkeycompat = op.repo.ui.configbool('server', 'bookmarks-pushkey-compat') | |
|
2001 | bookmarksmode = op.modes.get('bookmarks', 'apply') | |
|
1997 | 2002 | |
|
1998 | pushkeycompat = op.repo.ui.configbool('server', 'bookmarks-pushkey-compat') | |
|
1999 | if pushkeycompat: | |
|
2000 | allhooks = [] | |
|
2003 | if bookmarksmode == 'apply': | |
|
2004 | tr = op.gettransaction() | |
|
2005 | bookstore = op.repo._bookmarks | |
|
2006 | if pushkeycompat: | |
|
2007 | allhooks = [] | |
|
2008 | for book, node in changes: | |
|
2009 | hookargs = tr.hookargs.copy() | |
|
2010 | hookargs['pushkeycompat'] = '1' | |
|
2011 | hookargs['namespace'] = 'bookmark' | |
|
2012 | hookargs['key'] = book | |
|
2013 | hookargs['old'] = nodemod.hex(bookstore.get(book, '')) | |
|
2014 | hookargs['new'] = nodemod.hex(node if node is not None else '') | |
|
2015 | allhooks.append(hookargs) | |
|
2016 | ||
|
2017 | for hookargs in allhooks: | |
|
2018 | op.repo.hook('prepushkey', throw=True, **hookargs) | |
|
2019 | ||
|
2020 | bookstore.applychanges(op.repo, op.gettransaction(), changes) | |
|
2021 | ||
|
2022 | if pushkeycompat: | |
|
2023 | def runhook(): | |
|
2024 | for hookargs in allhooks: | |
|
2025 | op.repo.hook('prepushkey', **hookargs) | |
|
2026 | op.repo._afterlock(runhook) | |
|
2027 | ||
|
2028 | elif bookmarksmode == 'records': | |
|
2001 | 2029 | for book, node in changes: |
|
2002 | hookargs = tr.hookargs.copy() | |
|
2003 | hookargs['pushkeycompat'] = '1' | |
|
2004 | hookargs['namespace'] = 'bookmark' | |
|
2005 | hookargs['key'] = book | |
|
2006 | hookargs['old'] = nodemod.hex(bookstore.get(book, '')) | |
|
2007 | hookargs['new'] = nodemod.hex(node if node is not None else '') | |
|
2008 | allhooks.append(hookargs) | |
|
2009 | for hookargs in allhooks: | |
|
2010 | op.repo.hook('prepushkey', throw=True, **hookargs) | |
|
2011 | ||
|
2012 | bookstore.applychanges(op.repo, tr, changes) | |
|
2013 | ||
|
2014 | if pushkeycompat: | |
|
2015 | def runhook(): | |
|
2016 | for hookargs in allhooks: | |
|
2017 | op.repo.hook('prepushkey', **hookargs) | |
|
2018 | op.repo._afterlock(runhook) | |
|
2030 | record = {'bookmark': book, 'node': node} | |
|
2031 | op.records.add('bookmarks', record) | |
|
2032 | else: | |
|
2033 | raise error.ProgrammingError('unkown bookmark mode: %s' % bookmarksmode) | |
|
2019 | 2034 | |
|
2020 | 2035 | @parthandler('phase-heads') |
|
2021 | 2036 | def handlephases(op, inpart): |
General Comments 0
You need to be logged in to leave comments.
Login now