~jcsackett/charmworld/bac-tag-constraints

« back to all changes in this revision

Viewing changes to charmworld/jobs/changelog.py

  • Committer: Aaron Bentley
  • Date: 2013-02-12 18:57:02 UTC
  • mfrom: (149 charmworld)
  • mto: This revision was merged to the branch mainline in revision 150.
  • Revision ID: aaron@canonical.com-20130212185702-9gnf40ao17a7uw7v
Merged trunk into mongo-urls.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 
5
5
import logging
6
6
 
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
11
 
 
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
15
11
 
16
 
log = logging.getLogger("charm.changelog")
17
 
 
18
 
 
19
 
def _rev_info(r, branch):
20
 
    d = {
21
 
        "revno": branch.revision_id_to_revno(r.revision_id),
22
 
        "committer": r.committer,
23
 
        "created": r.timestamp,
24
 
        "message": r.message
25
 
    }
26
 
    return d
27
 
 
28
 
 
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)
33
 
 
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)
38
 
 
39
 
    branch.lock_read()
40
 
    try:
41
 
        graph = branch.repository.get_graph()
42
 
        revs = list(
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)
46
 
    finally:
47
 
        branch.unlock()
48
 
    revisions = map(branch.repository.get_revision, revs)
49
 
 
50
 
    charm_data["changes"] = changes = []
51
 
 
52
 
    for r in revisions:
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)),
58
 
        branch)
59
 
 
60
 
 
61
 
def scan_changes(in_queue, out_queue):
62
 
    while 1:
63
 
        item = in_queue.next()
64
 
        if not item:
65
 
            return
66
 
        try:
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']))
73
 
        except Exception, e:
74
 
            log.exception("bzr error on %s: %s", charm_data, str(e))
75
 
        else:
76
 
            out_queue.put(charm_data)
77
 
        finally:
78
 
            # Remove the job from the input queue.
79
 
            item.complete()
80
12
 
81
13
if __name__ == '__main__':
82
14
    logging.basicConfig(