view mercurial/pushkey.py @ 18571:ad5817505834

test-convert-git: stabilize corruption of test git repo This error would show up only intermittently since the test depended on the order of the directories returned by os.walk. The damage repository test would delete the first object file it came across. However, the order of the directory listing is arbitrary (it seems to depend on the filesystem). This meant that sometimes a commit object was deleted, sometimes a blob object and sometimes a tree object. So, fix by hardcoding which object to delete. Delete a commit object, a blob object and a tree object in three separate tests.
author Ross Lagerwall <rosslagerwall@gmail.com>
date Fri, 08 Feb 2013 07:57:32 -0600
parents 59c14bf5a48c
children a2c7ae21e8f4
line wrap: on
line source

# pushkey.py - dispatching for pushing and pulling keys
#
# Copyright 2010 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 bookmarks, phases, obsolete

def _nslist(repo):
    n = {}
    for k in _namespaces:
        n[k] = ""
    if not obsolete._enabled:
        n.pop('obsolete')
    return n

_namespaces = {"namespaces": (lambda *x: False, _nslist),
               "bookmarks": (bookmarks.pushbookmark, bookmarks.listbookmarks),
               "phases": (phases.pushphase, phases.listphases),
               "obsolete": (obsolete.pushmarker, obsolete.listmarkers),
              }

def register(namespace, pushkey, listkeys):
    _namespaces[namespace] = (pushkey, listkeys)

def _get(namespace):
    return _namespaces.get(namespace, (lambda *x: False, lambda *x: {}))

def push(repo, namespace, key, old, new):
    '''should succeed iff value was old'''
    pk = _get(namespace)[0]
    return pk(repo, key, old, new)

def list(repo, namespace):
    '''return a dict'''
    lk = _get(namespace)[1]
    return lk(repo)