author | Dale Wijnand <dale.wijnand@gmail.com> |
Thu, 20 Jan 2011 21:18:29 +0100 | |
changeset 295 | 9741d82e5b1e |
parent 262 | 675474f5be32 |
child 296 | 6feeef02c057 |
permissions | -rw-r--r-- |
242
03d8f07230b3
Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents:
78
diff
changeset
|
1 |
""" |
03d8f07230b3
Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents:
78
diff
changeset
|
2 |
Hook to log changesets pushed and pulled |
03d8f07230b3
Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents:
78
diff
changeset
|
3 |
""" |
54 | 4 |
|
5 |
from mercurial.i18n import _ |
|
6 |
import mercurial.util |
|
7 |
import mercurial.node |
|
8 |
||
9 |
import os |
|
10 |
import time |
|
262
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
11 |
import fcntl |
295
9741d82e5b1e
servelog: use simplejson and the % operator for python versions < 2.6
Dale Wijnand <dale.wijnand@gmail.com>
parents:
262
diff
changeset
|
12 |
try: import simplejson as json |
9741d82e5b1e
servelog: use simplejson and the % operator for python versions < 2.6
Dale Wijnand <dale.wijnand@gmail.com>
parents:
262
diff
changeset
|
13 |
except ImportError: import json |
78
2a3407a14654
Replaced env vars with Python globals
Paul Crowley <paul@lshift.net>
parents:
67
diff
changeset
|
14 |
from mercurialserver import ruleset, changes |
2a3407a14654
Replaced env vars with Python globals
Paul Crowley <paul@lshift.net>
parents:
67
diff
changeset
|
15 |
|
54 | 16 |
def hook(ui, repo, hooktype, node=None, source=None, **kwargs): |
55 | 17 |
if hooktype == 'changegroup': |
18 |
op = "push" |
|
19 |
elif hooktype == 'outgoing': |
|
20 |
op = "pull" |
|
21 |
else: |
|
59
f96de2d99f00
give logging module a more specific name
Paul Crowley <paul@lshift.net>
parents:
56
diff
changeset
|
22 |
raise mercurial.util.Abort(_('servelog installed as wrong hook type,' |
55 | 23 |
' must be changegroup or outgoing but is %s') % hooktype) |
262
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
24 |
log = open(repo.join("mercurial-server.log"), "a+") |
54 | 25 |
try: |
262
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
26 |
fcntl.flock(log.fileno(), fcntl.LOCK_EX) |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
27 |
log.seek(0, os.SEEK_END) |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
28 |
# YAML log file format |
295
9741d82e5b1e
servelog: use simplejson and the % operator for python versions < 2.6
Dale Wijnand <dale.wijnand@gmail.com>
parents:
262
diff
changeset
|
29 |
log.write("- %s\n" % json.dumps(dict( |
262
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
30 |
timestamp=time.strftime("%Y-%m-%d_%H:%M:%S Z", time.gmtime()), |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
31 |
op=op, |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
32 |
key=ruleset.rules.get('user'), |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
33 |
ssh_connection=os.environ['SSH_CONNECTION'], |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
34 |
nodes=[mercurial.node.hex(ctx.node()) |
675474f5be32
New log file format based on JSON/YAML
Paul Crowley <paul@lshift.net>
parents:
242
diff
changeset
|
35 |
for ctx in changes.changes(repo, node)], |
295
9741d82e5b1e
servelog: use simplejson and the % operator for python versions < 2.6
Dale Wijnand <dale.wijnand@gmail.com>
parents:
262
diff
changeset
|
36 |
))) |
54 | 37 |
finally: |
38 |
log.close() |