- for n in pwd.resolve(dir).subs():
- if fnmatch.fnmatch(n.name, base):
- try:
- log('Saving %r\n' % n.name)
- inf = n.open()
- outf = open(n.name, 'wb')
- write_to_file(inf, outf)
- outf.close()
- except Exception, e:
- rv = 1
- log(' error: %s\n' % e)
+
+ res = vfs.resolve(repo, dir, parent=pwd)
+ _, dir_item = res[-1]
+ if not dir_item:
+ raise Exception('%r does not exist' % dir)
+ for name, item in vfs.contents(repo, dir_item):
+ if name == '.':
+ continue
+ if fnmatch.fnmatch(name, base):
+ if stat.S_ISLNK(vfs.item_mode(item)):
+ deref = vfs.resolve(repo, name, parent=res)
+ deref_name, deref_item = deref[-1]
+ if not deref_item:
+ raise Exception('%r does not exist' %
+ '/'.join(name for name, item
+ in deref))
+ item = deref_item
+ with vfs.fopen(repo, item) as srcfile:
+ with open(name, 'wb') as destfile:
+ log('Saving %r\n' % name)
+ write_to_file(srcfile, destfile)