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']: