198 |
198 |
199 matchfn is function to filter names of files to write to archive. |
199 matchfn is function to filter names of files to write to archive. |
200 |
200 |
201 prefix is name of path to put before every archive member.''' |
201 prefix is name of path to put before every archive member.''' |
202 |
202 |
203 def write(name, mode, islink, data): |
203 def write(name, mode, islink, getdata): |
204 if matchfn and not matchfn(name): return |
204 if matchfn and not matchfn(name): return |
|
205 data = getdata() |
205 if decode: |
206 if decode: |
206 data = repo.wwritedata(name, data) |
207 data = repo.wwritedata(name, data) |
207 archiver.addfile(name, mode, islink, data) |
208 archiver.addfile(name, mode, islink, data) |
208 |
209 |
209 ctx = repo.changectx(node) |
210 ctx = repo.changectx(node) |
210 archiver = archivers[kind](dest, prefix, mtime or ctx.date()[0]) |
211 archiver = archivers[kind](dest, prefix, mtime or ctx.date()[0]) |
211 m = ctx.manifest() |
212 m = ctx.manifest() |
212 items = m.items() |
213 items = m.items() |
213 items.sort() |
214 items.sort() |
214 write('.hg_archival.txt', 0644, False, |
215 write('.hg_archival.txt', 0644, False, |
215 'repo: %s\nnode: %s\n' % (hex(repo.changelog.node(0)), hex(node))) |
216 lambda: 'repo: %s\nnode: %s\n' % (hex(repo.changelog.node(0)), hex(node))) |
216 for filename, filenode in items: |
217 for filename, filenode in items: |
217 write(filename, m.execf(filename) and 0755 or 0644, m.linkf(filename), |
218 write(filename, m.execf(filename) and 0755 or 0644, m.linkf(filename), |
218 repo.file(filename).read(filenode)) |
219 lambda: repo.file(filename).read(filenode)) |
219 archiver.done() |
220 archiver.done() |