mercurial/archival.py
changeset 4933 667290b6c95e
parent 4862 6f08bc1bd00b
equal deleted inserted replaced
4932:93b7e2fa7ee3 4933:667290b6c95e
   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()