Mercurial > hg
annotate hgext/blackbox.py @ 27920:da5f23362517 stable
changegroup: cg3 has two empty groups *after* manifests
changegroup.getchunks() determines the end of the stream by looking
for an empty chunk group (two consecutive empty chunks). It ignores
empty groups in the first two groups. Changegroup 3 introduced an
empty chunk between the manifests and the files, which confuses
getchunks(). Since it comes after the first two, getchunks() will stop
there.
Fix by rewriting getchunks so it first counts two groups (empty or
not) and then keeps antostarts counting empty groups. With this counting,
changegroup 1 and 2 have exactly one empty group after the first two
groups, while changegroup 3 has two (one for directories and one for
files).
It's a little hard to test this at this point, but I have verified
that this patch fixes narrowhg (which was broken before this
patch). Also, future patches will fix "hg strip" with treemanifests,
and once that's done, getchunks() will be tested through tests of "hg
strip".
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 19 Jan 2016 17:44:25 -0800 |
parents | e8f9dffca36f |
children | ab6468270b83 |
rev | line source |
---|---|
18676 | 1 # blackbox.py - log repository events to a file for post-mortem debugging |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
2 # |
18676 | 3 # Copyright 2010 Nicolas Dumazet |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
4 # Copyright 2013 Facebook, Inc. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
5 # |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
8 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
9 """log repository events to a blackbox for debugging |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
10 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
11 Logs event information to .hg/blackbox.log to help debug and diagnose problems. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
12 The events that get logged can be configured via the blackbox.track config key. |
19162
27013ace80eb
blackbox: fix literal block syntax
Takumi IINO <trot.thunder@gmail.com>
parents:
19066
diff
changeset
|
13 Examples:: |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
14 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
15 [blackbox] |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
16 track = * |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
17 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
18 [blackbox] |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
19 track = command, commandfinish, commandexception, exthook, pythonhook |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
20 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
21 [blackbox] |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
22 track = incoming |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
23 |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
24 [blackbox] |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
25 # limit the size of a log file |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
26 maxsize = 1.5 MB |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
27 # rotate up to N log files when the current one gets too big |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
28 maxfiles = 3 |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
29 |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
30 """ |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
31 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
32 from mercurial import util, cmdutil |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
33 from mercurial.i18n import _ |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
34 import errno, os, re |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
35 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
36 cmdtable = {} |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
37 command = cmdutil.command(cmdtable) |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
23877
diff
changeset
|
38 # Note for extension authors: ONLY specify testedwith = 'internal' for |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
23877
diff
changeset
|
39 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
23877
diff
changeset
|
40 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
23877
diff
changeset
|
41 # leave the attribute unspecified. |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
42 testedwith = 'internal' |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
43 lastblackbox = None |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
44 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
45 def wrapui(ui): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
46 class blackboxui(ui.__class__): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
47 @util.propertycache |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
48 def track(self): |
19052
63a783d1ac85
blackbox: fix a case of name capture
Bryan O'Sullivan <bryano@fb.com>
parents:
18831
diff
changeset
|
49 return self.configlist('blackbox', 'track', ['*']) |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
50 |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
51 def _openlogfile(self): |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
52 def rotate(oldpath, newpath): |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
53 try: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
54 os.unlink(newpath) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
55 except OSError as err: |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
56 if err.errno != errno.ENOENT: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
57 self.debug("warning: cannot remove '%s': %s\n" % |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
58 (newpath, err.strerror)) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
59 try: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
60 if newpath: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
61 os.rename(oldpath, newpath) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
62 except OSError as err: |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
63 if err.errno != errno.ENOENT: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
64 self.debug("warning: cannot rename '%s' to '%s': %s\n" % |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
65 (newpath, oldpath, err.strerror)) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
66 |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
67 fp = self._bbopener('blackbox.log', 'a') |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
68 maxsize = self.configbytes('blackbox', 'maxsize', 1048576) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
69 if maxsize > 0: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
70 st = os.fstat(fp.fileno()) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
71 if st.st_size >= maxsize: |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
72 path = fp.name |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
73 fp.close() |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
74 maxfiles = self.configint('blackbox', 'maxfiles', 7) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
75 for i in xrange(maxfiles - 1, 1, -1): |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
76 rotate(oldpath='%s.%d' % (path, i - 1), |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
77 newpath='%s.%d' % (path, i)) |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
78 rotate(oldpath=path, |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
79 newpath=maxfiles > 0 and path + '.1') |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
80 fp = self._bbopener('blackbox.log', 'a') |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
81 return fp |
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
82 |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
83 def log(self, event, *msg, **opts): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
84 global lastblackbox |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
85 super(blackboxui, self).log(event, *msg, **opts) |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
86 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
87 if not '*' in self.track and not event in self.track: |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
88 return |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
89 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
90 if util.safehasattr(self, '_blackbox'): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
91 blackbox = self._blackbox |
18831
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
92 elif util.safehasattr(self, '_bbopener'): |
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
93 try: |
19066
2cad301a7f06
blackbox: automatically rotate log files
Bryan O'Sullivan <bryano@fb.com>
parents:
19052
diff
changeset
|
94 self._blackbox = self._openlogfile() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
95 except (IOError, OSError) as err: |
18831
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
96 self.debug('warning: cannot write to blackbox.log: %s\n' % |
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
97 err.strerror) |
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
98 del self._bbopener |
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
99 self._blackbox = None |
17f6644a2fbc
blackbox: defer opening a log file until needed (issue3869)
Bryan O'Sullivan <bryano@fb.com>
parents:
18810
diff
changeset
|
100 blackbox = self._blackbox |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
101 else: |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
102 # certain ui instances exist outside the context of |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
103 # a repo, so just default to the last blackbox that |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
104 # was seen. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
105 blackbox = lastblackbox |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
106 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
107 if blackbox: |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
108 date = util.datestr(None, '%Y/%m/%d %H:%M:%S') |
18787
f56278a0a0c5
blackbox: use util.getuser for portability
Bryan O'Sullivan <bryano@fb.com>
parents:
18786
diff
changeset
|
109 user = util.getuser() |
26185 | 110 pid = str(os.getpid()) |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
111 formattedmsg = msg[0] % msg[1:] |
18786
ed39a8f94e95
blackbox: prevent failed I/O from causing hg to abort
Bryan O'Sullivan <bryano@fb.com>
parents:
18676
diff
changeset
|
112 try: |
26185 | 113 blackbox.write('%s %s (%s)> %s' % |
114 (date, user, pid, formattedmsg)) | |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
115 except IOError as err: |
18786
ed39a8f94e95
blackbox: prevent failed I/O from causing hg to abort
Bryan O'Sullivan <bryano@fb.com>
parents:
18676
diff
changeset
|
116 self.debug('warning: cannot write to blackbox.log: %s\n' % |
ed39a8f94e95
blackbox: prevent failed I/O from causing hg to abort
Bryan O'Sullivan <bryano@fb.com>
parents:
18676
diff
changeset
|
117 err.strerror) |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
118 lastblackbox = blackbox |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
119 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
120 def setrepo(self, repo): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19230
diff
changeset
|
121 self._bbopener = repo.vfs |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
122 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
123 ui.__class__ = blackboxui |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
124 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
125 def uisetup(ui): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
126 wrapui(ui) |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
127 |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
128 def reposetup(ui, repo): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
129 # During 'hg pull' a httppeer repo is created to represent the remote repo. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
130 # It doesn't have a .hg directory to put a blackbox in, so we don't do |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
131 # the blackbox setup for it. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
132 if not repo.local(): |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
133 return |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
134 |
19230
6d6f148cada9
blackbox: fix blackbox causing exceptions in tests
Durham Goode <durham@fb.com>
parents:
19162
diff
changeset
|
135 if util.safehasattr(ui, 'setrepo'): |
6d6f148cada9
blackbox: fix blackbox causing exceptions in tests
Durham Goode <durham@fb.com>
parents:
19162
diff
changeset
|
136 ui.setrepo(repo) |
18673
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
137 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
138 @command('^blackbox', |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
139 [('l', 'limit', 10, _('the number of events to show')), |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
140 ], |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
141 _('hg blackbox [OPTION]...')) |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
142 def blackbox(ui, repo, *revs, **opts): |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
143 '''view the recent repository events |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
144 ''' |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
145 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
146 if not os.path.exists(repo.join('blackbox.log')): |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
147 return |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
148 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
149 limit = opts.get('limit') |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
19230
diff
changeset
|
150 blackbox = repo.vfs('blackbox.log', 'r') |
18673
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
151 lines = blackbox.read().split('\n') |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
152 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
153 count = 0 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
154 output = [] |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
155 for line in reversed(lines): |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
156 if count >= limit: |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
157 break |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
158 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
159 # count the commands by matching lines like: 2013/01/23 19:13:36 root> |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
160 if re.match('^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*', line): |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
161 count += 1 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
162 output.append(line) |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
163 |
f27598902007
blackbox: adds a 'blackbox' command for viewing recent logs
Durham Goode <durham@fb.com>
parents:
18669
diff
changeset
|
164 ui.status('\n'.join(reversed(output))) |