##// END OF EJS Templates
pull request: use unionrepo instead of outgoing...
pull request: use unionrepo instead of outgoing This makes it possible to look the 'moving target' symbols up in the right repo. Using a revset with the right revisions also removes the need for pruning changesets that are outside the requested range. It will also not be confused by changesets that for some reason has been pulled to the repo but haven't been merged yet. They are going to be 'merged' by the 'pull' request and should thus be a part of what is reviewed.

File last commit:

r1203:6832ef66 beta
r3303:ae5ac36c beta
Show More
keyedinstance.py
36 lines | 1.1 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class KeyedInstance(object):
"""A class whose instances have a unique identifier of some sort
No two instances with the same unique ID should exist - if we try to create
a second instance, the first should be returned.
"""
_instances = dict()
def __new__(cls, *p, **k):
instances = cls._instances
clskey = str(cls)
if clskey not in instances:
instances[clskey] = dict()
instances = instances[clskey]
key = cls._key(*p, **k)
if key not in instances:
instances[key] = super(KeyedInstance, cls).__new__(cls)
return instances[key]
@classmethod
def _key(cls, *p, **k):
"""Given a unique identifier, return a dictionary key
This should be overridden by child classes, to specify which parameters
should determine an object's uniqueness
"""
raise NotImplementedError()
@classmethod
def clear(cls):
# Allow cls.clear() as well as uniqueInstance.clear(cls)
if str(cls) in cls._instances:
del cls._instances[str(cls)]