mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Bug 971265 - Add --no-remove-empty-directories to process_install_manifest.py. r=gps
This commit is contained in:
parent
8b96dea6f0
commit
e929711433
@ -14,14 +14,18 @@ COMPLETE = 'From {dest}: Kept {existing} existing; Added/updated {updated}; ' \
|
||||
'Removed {rm_files} files and {rm_dirs} directories.'
|
||||
|
||||
|
||||
def process_manifest(destdir, paths, remove_unaccounted=True):
|
||||
def process_manifest(destdir, paths,
|
||||
remove_unaccounted=True,
|
||||
remove_empty_directories=True):
|
||||
manifest = InstallManifest()
|
||||
for path in paths:
|
||||
manifest |= InstallManifest(path=path)
|
||||
|
||||
copier = FileCopier()
|
||||
manifest.populate_registry(copier)
|
||||
return copier.copy(destdir, remove_unaccounted=remove_unaccounted)
|
||||
return copier.copy(destdir,
|
||||
remove_unaccounted=remove_unaccounted,
|
||||
remove_empty_directories=remove_empty_directories)
|
||||
|
||||
|
||||
def main(argv):
|
||||
@ -32,11 +36,14 @@ def main(argv):
|
||||
parser.add_argument('manifests', nargs='+', help='Path to manifest file(s).')
|
||||
parser.add_argument('--no-remove', action='store_true',
|
||||
help='Do not remove unaccounted files from destination.')
|
||||
parser.add_argument('--no-remove-empty-directories', action='store_true',
|
||||
help='Do not remove empty directories from destination.')
|
||||
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
result = process_manifest(args.destdir, args.manifests,
|
||||
remove_unaccounted=not args.no_remove)
|
||||
remove_unaccounted=not args.no_remove,
|
||||
remove_empty_directories=not args.no_remove_empty_directories)
|
||||
|
||||
print(COMPLETE.format(dest=args.destdir,
|
||||
existing=result.existing_files_count,
|
||||
|
@ -148,7 +148,7 @@ class FileCopier(FileRegistry):
|
||||
FileRegistry with the ability to copy the registered files to a separate
|
||||
directory.
|
||||
'''
|
||||
def copy(self, destination, skip_if_older=True, remove_unaccounted=True):
|
||||
def copy(self, destination, skip_if_older=True, remove_unaccounted=True, remove_empty_directories=True):
|
||||
'''
|
||||
Copy all registered files to the given destination path. The given
|
||||
destination can be an existing directory, or not exist at all. It
|
||||
@ -158,7 +158,8 @@ class FileCopier(FileRegistry):
|
||||
|
||||
By default, files in the destination directory that aren't registered
|
||||
are removed and empty directories are deleted. To disable removing of
|
||||
unregistered files, pass remove_unaccounted=False.
|
||||
unregistered files, pass remove_unaccounted=False. To disable removing
|
||||
empty directories, pass remove_empty_directories=False.
|
||||
|
||||
Returns a FileCopyResult that details what changed.
|
||||
'''
|
||||
@ -295,6 +296,9 @@ class FileCopier(FileRegistry):
|
||||
else:
|
||||
result.existing_files.add(destfile)
|
||||
|
||||
if not remove_empty_directories:
|
||||
return result
|
||||
|
||||
# Figure out which directories can be removed. This is complicated
|
||||
# by the fact we optionally remove existing files. This would be easy
|
||||
# if we walked the directory tree after installing files. But, we're
|
||||
|
@ -199,10 +199,35 @@ class TestFileCopier(TestWithTmpDir):
|
||||
|
||||
self.assertEqual(self.all_files(self.tmpdir), set(['foo', 'bar',
|
||||
'populateddir/foo']))
|
||||
self.assertEqual(self.all_dirs(self.tmpdir), set(['populateddir']))
|
||||
self.assertEqual(result.removed_files, set())
|
||||
self.assertEqual(result.removed_directories,
|
||||
set([self.tmppath('emptydir')]))
|
||||
|
||||
def test_no_remove_empty_directories(self):
|
||||
copier = FileCopier()
|
||||
copier.add('foo', GeneratedFile('foo'))
|
||||
|
||||
with open(self.tmppath('bar'), 'a'):
|
||||
pass
|
||||
|
||||
os.mkdir(self.tmppath('emptydir'))
|
||||
d = self.tmppath('populateddir')
|
||||
os.mkdir(d)
|
||||
|
||||
with open(self.tmppath('populateddir/foo'), 'a'):
|
||||
pass
|
||||
|
||||
result = copier.copy(self.tmpdir, remove_unaccounted=False,
|
||||
remove_empty_directories=False)
|
||||
|
||||
self.assertEqual(self.all_files(self.tmpdir), set(['foo', 'bar',
|
||||
'populateddir/foo']))
|
||||
self.assertEqual(self.all_dirs(self.tmpdir), set(['emptydir',
|
||||
'populateddir']))
|
||||
self.assertEqual(result.removed_files, set())
|
||||
self.assertEqual(result.removed_directories, set())
|
||||
|
||||
|
||||
class TestFilePurger(TestWithTmpDir):
|
||||
def test_file_purger(self):
|
||||
|
Loading…
Reference in New Issue
Block a user