7
from bzrlib.errors import InvalidRevisionSpec
8
from bzrlib.transport import get_transport
9
from bzrlib.branch import Branch
10
from bzrlib.revisionspec import RevisionSpec
12
7
from config import CHANGELOG_IN_QUEUE
13
8
from config import CHANGELOG_OUT_QUEUE
9
from worker import scan_changes
14
10
from utils import get_queues
16
log = logging.getLogger("charm.changelog")
19
def _rev_info(r, branch):
21
"revno": branch.revision_id_to_revno(r.revision_id),
22
"committer": r.committer,
23
"created": r.timestamp,
29
def fetch_changes(charm_data):
30
branch_dir = charm_data["branch_dir"]
31
transport = get_transport(branch_dir)
32
branch = Branch.open_from_transport(transport)
34
# We only want the last 10 changes, in descending order.
35
_, cur_rev_id = branch.last_revision_info()
36
spec = RevisionSpec.from_string("revno:-10")
37
last_rev_id = spec.as_revision_id(branch)
41
graph = branch.repository.get_graph()
43
graph.iter_lefthand_ancestry(cur_rev_id, (last_rev_id,)))
44
if not cur_rev_id in revs:
45
revs.insert(0, cur_rev_id)
48
revisions = map(branch.repository.get_revision, revs)
50
charm_data["changes"] = changes = []
53
changes.append(_rev_info(r, branch))
54
charm_data["last_change"] = changes[0]
55
charm_data["first_change"] = _rev_info(
56
branch.repository.get_revision(
57
RevisionSpec.from_string("revno:1").as_revision_id(branch)),
61
def scan_changes(in_queue, out_queue):
63
item = in_queue.next()
67
charm_data = item.payload
68
#log.info("Fetching changes for %s", charm_data["branch_spec"])
69
fetch_changes(charm_data)
70
except InvalidRevisionSpec, e:
71
log.warning("bzr invalid rev on %s %s" % (
72
charm_data['branch_spec'], charm_data['branch_dir']))
74
log.exception("bzr error on %s: %s", charm_data, str(e))
76
out_queue.put(charm_data)
78
# Remove the job from the input queue.
81
13
if __name__ == '__main__':
82
14
logging.basicConfig(