equal
deleted
inserted
replaced
111 name, value = m.groups() |
111 name, value = m.groups() |
112 value = value.replace(r'\"', '"') |
112 value = value.replace(r'\"', '"') |
113 value = value.replace(r'\\', '\\') |
113 value = value.replace(r'\\', '\\') |
114 certs[name] = value |
114 certs[name] = value |
115 # Monotone may have subsecond dates: 2005-02-05T09:39:12.364306 |
115 # Monotone may have subsecond dates: 2005-02-05T09:39:12.364306 |
116 certs["date"] = certs["date"].split('.')[0] |
116 # and all times are stored in UTC |
|
117 certs["date"] = certs["date"].split('.')[0] + " UTC" |
117 return certs |
118 return certs |
118 |
119 |
119 # implement the converter_source interface: |
120 # implement the converter_source interface: |
120 |
121 |
121 def getheads(self): |
122 def getheads(self): |
126 |
127 |
127 def getchanges(self, rev): |
128 def getchanges(self, rev): |
128 #revision = self.mtncmd("get_revision %s" % rev).split("\n\n") |
129 #revision = self.mtncmd("get_revision %s" % rev).split("\n\n") |
129 revision = self.mtnrun("get_revision", rev).split("\n\n") |
130 revision = self.mtnrun("get_revision", rev).split("\n\n") |
130 files = {} |
131 files = {} |
131 addedfiles = {} |
132 ignoremove = {} |
132 renameddirs = [] |
133 renameddirs = [] |
133 copies = {} |
134 copies = {} |
134 for e in revision: |
135 for e in revision: |
135 m = self.add_file_re.match(e) |
136 m = self.add_file_re.match(e) |
136 if m: |
137 if m: |
137 files[m.group(1)] = rev |
138 files[m.group(1)] = rev |
138 addedfiles[m.group(1)] = rev |
139 ignoremove[m.group(1)] = rev |
139 m = self.patch_re.match(e) |
140 m = self.patch_re.match(e) |
140 if m: |
141 if m: |
141 files[m.group(1)] = rev |
142 files[m.group(1)] = rev |
142 # Delete/rename is handled later when the convert engine |
143 # Delete/rename is handled later when the convert engine |
143 # discovers an IOError exception from getfile, |
144 # discovers an IOError exception from getfile, |
148 m = self.rename_re.match(e) |
149 m = self.rename_re.match(e) |
149 if m: |
150 if m: |
150 toname = m.group(2) |
151 toname = m.group(2) |
151 fromname = m.group(1) |
152 fromname = m.group(1) |
152 if self.mtnisfile(toname, rev): |
153 if self.mtnisfile(toname, rev): |
|
154 ignoremove[toname] = 1 |
153 copies[toname] = fromname |
155 copies[toname] = fromname |
154 files[toname] = rev |
156 files[toname] = rev |
155 files[fromname] = rev |
157 files[fromname] = rev |
156 elif self.mtnisdir(toname, rev): |
158 elif self.mtnisdir(toname, rev): |
157 renameddirs.append((fromname, toname)) |
159 renameddirs.append((fromname, toname)) |
159 # Directory renames can be handled only once we have recorded |
161 # Directory renames can be handled only once we have recorded |
160 # all new files |
162 # all new files |
161 for fromdir, todir in renameddirs: |
163 for fromdir, todir in renameddirs: |
162 renamed = {} |
164 renamed = {} |
163 for tofile in self.files: |
165 for tofile in self.files: |
164 if tofile in addedfiles: |
166 if tofile in ignoremove: |
165 continue |
167 continue |
166 if tofile.startswith(todir + '/'): |
168 if tofile.startswith(todir + '/'): |
167 renamed[tofile] = fromdir + tofile[len(todir):] |
169 renamed[tofile] = fromdir + tofile[len(todir):] |
|
170 # Avoid chained moves like: |
|
171 # d1(/a) => d3/d1(/a) |
|
172 # d2 => d3 |
|
173 ignoremove[tofile] = 1 |
168 for tofile, fromfile in renamed.items(): |
174 for tofile, fromfile in renamed.items(): |
169 self.ui.debug (_("copying file in renamed directory " |
175 self.ui.debug (_("copying file in renamed directory " |
170 "from '%s' to '%s'") |
176 "from '%s' to '%s'") |
171 % (fromfile, tofile), '\n') |
177 % (fromfile, tofile), '\n') |
172 files[tofile] = rev |
178 files[tofile] = rev |