Mercurial > hg > mercurial-crew-with-dirclash
comparison contrib/hgk.py @ 1680:c21b54f7f7b8
Merge with crew
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Wed, 01 Feb 2006 19:18:15 +0100 |
parents | f2b1df3dbcbb |
children | 5f581f337b05 |
comparison
equal
deleted
inserted
replaced
1679:675ca845c2f8 | 1680:c21b54f7f7b8 |
---|---|
1 #!/usr/bin/env python | |
2 # | |
3 # Minimal support for git commands on an hg repository | 1 # Minimal support for git commands on an hg repository |
4 # | 2 # |
5 # Copyright 2005 Chris Mason <mason@suse.com> | 3 # Copyright 2005 Chris Mason <mason@suse.com> |
6 # | 4 # |
7 # This software may be used and distributed according to the terms | 5 # This software may be used and distributed according to the terms |
14 changes=None, text=False): | 12 changes=None, text=False): |
15 def date(c): | 13 def date(c): |
16 return time.asctime(time.gmtime(c[2][0])) | 14 return time.asctime(time.gmtime(c[2][0])) |
17 | 15 |
18 if not changes: | 16 if not changes: |
19 (c, a, d, u) = repo.changes(node1, node2, files, match=match) | 17 changes = repo.changes(node1, node2, files, match=match) |
20 else: | 18 modified, added, removed, deleted, unknown = changes |
21 (c, a, d, u) = changes | |
22 if files: | 19 if files: |
23 c, a, d = map(lambda x: filterfiles(files, x), (c, a, d)) | 20 modified, added, removed = map(lambda x: filterfiles(files, x), |
24 | 21 (modified, added, removed)) |
25 if not c and not a and not d: | 22 |
23 if not modified and not added and not removed: | |
26 return | 24 return |
27 | 25 |
28 if node2: | 26 if node2: |
29 change = repo.changelog.read(node2) | 27 change = repo.changelog.read(node2) |
30 mmap2 = repo.manifest.read(change[0]) | 28 mmap2 = repo.manifest.read(change[0]) |
40 | 38 |
41 change = repo.changelog.read(node1) | 39 change = repo.changelog.read(node1) |
42 mmap = repo.manifest.read(change[0]) | 40 mmap = repo.manifest.read(change[0]) |
43 date1 = date(change) | 41 date1 = date(change) |
44 | 42 |
45 for f in c: | 43 for f in modified: |
46 to = None | 44 to = None |
47 if f in mmap: | 45 if f in mmap: |
48 to = repo.file(f).read(mmap[f]) | 46 to = repo.file(f).read(mmap[f]) |
49 tn = read(f) | 47 tn = read(f) |
50 fp.write("diff --git a/%s b/%s\n" % (f, f)) | 48 fp.write("diff --git a/%s b/%s\n" % (f, f)) |
51 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) | 49 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) |
52 for f in a: | 50 for f in added: |
53 to = None | 51 to = None |
54 tn = read(f) | 52 tn = read(f) |
55 fp.write("diff --git /dev/null b/%s\n" % (f)) | 53 fp.write("diff --git /dev/null b/%s\n" % (f)) |
56 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) | 54 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) |
57 for f in d: | 55 for f in removed: |
58 to = repo.file(f).read(mmap[f]) | 56 to = repo.file(f).read(mmap[f]) |
59 tn = None | 57 tn = None |
60 fp.write("diff --git a/%s /dev/null\n" % (f)) | 58 fp.write("diff --git a/%s /dev/null\n" % (f)) |
61 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) | 59 fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, text=text)) |
62 | 60 |
67 return time.asctime(time.gmtime(c[2][0])) | 65 return time.asctime(time.gmtime(c[2][0])) |
68 | 66 |
69 if node2: | 67 if node2: |
70 change = repo.changelog.read(node2) | 68 change = repo.changelog.read(node2) |
71 mmap2 = repo.manifest.read(change[0]) | 69 mmap2 = repo.manifest.read(change[0]) |
72 (c, a, d, u) = repo.changes(node1, node2) | 70 modified, added, removed, deleted, unknown = repo.changes(node1, node2) |
73 def read(f): return repo.file(f).read(mmap2[f]) | 71 def read(f): return repo.file(f).read(mmap2[f]) |
74 date2 = date(change) | 72 date2 = date(change) |
75 else: | 73 else: |
76 date2 = time.asctime() | 74 date2 = time.asctime() |
77 (c, a, d, u) = repo.changes(node1, None) | 75 modified, added, removed, deleted, unknown = repo.changes(node1) |
78 if not node1: | 76 if not node1: |
79 node1 = repo.dirstate.parents()[0] | 77 node1 = repo.dirstate.parents()[0] |
80 def read(f): return file(os.path.join(repo.root, f)).read() | 78 def read(f): return file(os.path.join(repo.root, f)).read() |
81 | 79 |
82 change = repo.changelog.read(node1) | 80 change = repo.changelog.read(node1) |
83 mmap = repo.manifest.read(change[0]) | 81 mmap = repo.manifest.read(change[0]) |
84 date1 = date(change) | 82 date1 = date(change) |
85 empty = "0" * 40; | 83 empty = "0" * 40; |
86 | 84 |
87 for f in c: | 85 for f in modified: |
88 # TODO get file permissions | 86 # TODO get file permissions |
89 print ":100664 100664 %s %s M\t%s\t%s" % (hg.hex(mmap[f]), | 87 print ":100664 100664 %s %s M\t%s\t%s" % (hg.hex(mmap[f]), |
90 hg.hex(mmap2[f]), f, f) | 88 hg.hex(mmap2[f]), f, f) |
91 for f in a: | 89 for f in added: |
92 print ":000000 100664 %s %s N\t%s\t%s" % (empty, hg.hex(mmap2[f]), f, f) | 90 print ":000000 100664 %s %s N\t%s\t%s" % (empty, hg.hex(mmap2[f]), f, f) |
93 for f in d: | 91 for f in removed: |
94 print ":100664 000000 %s %s D\t%s\t%s" % (hg.hex(mmap[f]), empty, f, f) | 92 print ":100664 000000 %s %s D\t%s\t%s" % (hg.hex(mmap[f]), empty, f, f) |
95 ## | 93 ## |
96 | 94 |
97 while True: | 95 while True: |
98 if opts['stdin']: | 96 if opts['stdin']: |