def test_add_package_file(self): """ Test adding a package that isn't already in the repository """ package_dir = os.path.join(self.homedir, '.%s/%s' % ('config', 'gtk-3.0')) os.makedirs(package_dir) touch('%s/testfile' % package_dir) dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['config'], dry_run=False) # This should succeed and the directory structure in the repository # should be created since it didn't already exist. dotfiles.add(['.config/gtk-3.0']) self.assertTrue( os.path.islink(os.path.join(self.homedir, '.config/gtk-3.0')))
def test_add_package(self): """ Test adding a package that isn't already in the repository """ package_dir = os.path.join(self.homedir, '.%s/%s' % ('config', 'gtk-3.0')) os.makedirs(package_dir) touch('%s/testfile' % package_dir) dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['config'], dry_run=False, quiet=True) # This should fail, you should not be able to add dotfiles that are # defined to be packages. dotfiles.add(['.config']) self.assertFalse(os.path.islink(os.path.join(self.homedir, '.config')))
def test_packages(self): """ Test packages. """ files = ['foo', 'package/bar'] symlinks = ['.foo', '.package/bar'] join = os.path.join # Create files for filename in files: path = join(self.repository, filename) dirname = os.path.dirname(path) if not os.path.exists(dirname): os.makedirs(dirname) touch(path) # Create Dotfiles object dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['package'], dry_run=False) # Create symlinks in homedir dotfiles.sync() # Verify it created what we expect def check_all(files, symlinks): self.assertTrue(os.path.isdir(join(self.homedir, '.package'))) for src, dst in zip(files, symlinks): self.assertTrue( is_link_to(join(self.homedir, dst), join(self.repository, src))) check_all(files, symlinks) # Add files to the repository new_files = [join(self.homedir, f) for f in ['.bar', '.package/foo']] for filename in new_files: path = join(self.homedir, filename) touch(path) new_repo_files = ['bar', 'package/foo'] dotfiles.add(new_files) check_all(files + new_repo_files, symlinks + new_files) # Remove them from the repository dotfiles.remove(new_files) check_all(files, symlinks) # Move the repository self.repository = join(self.homedir, 'Dotfiles2') dotfiles.move(self.repository) check_all(files, symlinks)
def test_packages(self): """ Test packages. """ files = ['foo', 'package/bar', 'package2/foo/bar'] symlinks = ['.foo', '.package/bar', '.package2/foo/bar'] join = os.path.join # Create files for filename in files: path = join(self.repository, filename) dirname = os.path.dirname(path) if not os.path.exists(dirname): os.makedirs(dirname) touch(path) # Create Dotfiles object dotfiles = Dotfiles( homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=set(['package', 'package2/foo']), dry_run=False) # Create symlinks in homedir dotfiles.sync() # Verify it created what we expect for folder in ['.package', '.package2', '.package2/foo']: self.assertTrue(os.path.isdir(join(self.homedir, folder))) def check_all(files, symlinks): for src, dst in zip(files, symlinks): self.assertTrue(is_link_to(join(self.homedir, dst), join(self.repository, src))) check_all(files, symlinks) # Add files to the repository new_files = [join(self.homedir, f) for f in ['.bar', '.package/foo', '.package2/foo/bar2']] for filename in new_files: path = join(self.homedir, filename) touch(path) new_repo_files = ['bar', 'package/foo', 'package2/foo/bar2'] dotfiles.add(new_files) check_all(files + new_repo_files, symlinks + new_files) # Remove them from the repository dotfiles.remove(new_files) check_all(files, symlinks) # Move the repository self.repository = join(self.homedir, 'Dotfiles2') dotfiles.move(self.repository) check_all(files, symlinks)
def test_hosts_mode(self): """Test that host mode behaves correctly.""" all_repo_files = ( ('.vimrc', 'all'), ('.mozilla', 'guiworkstation'), ) for homefile, host in all_repo_files: touch(os.path.join(self.homedir, homefile)) os.makedirs(os.path.join(self.repository, 'all.host')) dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=[], dry_run=False) self.assertTrue(dotfiles.hosts_mode()) for homefile, host in all_repo_files: dotfiles.add([os.path.join(self.homedir, homefile)], host) self.verifyFileStatus(homefile, host) for homefile, host in all_repo_files: os.unlink(os.path.join(self.homedir, homefile)) dotfiles._load() dotfiles.sync() self.verifyFileStatus('.vimrc', 'all') self.assertTrue(not os.path.exists(os.path.join(self.homedir, '.mozilla'))) dotfiles._load() dotfiles.sync(hostname='guiworkstation') self.assertTrue(os.path.exists(os.path.join(self.homedir, '.mozilla'))) dotfiles._load() dotfiles.remove([os.path.join(self.homedir, '.mozilla')], 'guiworkstation') dotfiles._load() dotfiles.sync(hostname='guiworkstation') self.verifyFileStatus('.vimrc', 'all') self.assertTrue(not os.path.islink(os.path.join(self.homedir, '.mozilla')))
def test_missing_package(self): """ Test a non-existent package. """ package_file = '.package/bar' # Create Dotfiles object dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['package'], dry_run=False) path = os.path.join(self.homedir, package_file) dirname = os.path.dirname(path) if not os.path.exists(dirname): os.makedirs(dirname) touch(path) dotfiles.add([os.path.join(self.homedir, package_file)])
def test_add_package(self): """ Test adding a package that isn't already in the repository """ package_dir = os.path.join(self.homedir, '.%s/%s' % ('config', 'gtk-3.0')) os.makedirs(package_dir) touch('%s/testfile' % package_dir) dotfiles = Dotfiles( homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['config'], dry_run=False, quiet=True) # This should fail, you should not be able to add dotfiles that are # defined to be packages. dotfiles.add(['.config']) self.assertFalse(os.path.islink(os.path.join(self.homedir, '.config')))
def test_add_package_file(self): """ Test adding a package that isn't already in the repository """ package_dir = os.path.join(self.homedir, '.%s/%s' % ('config', 'gtk-3.0')) os.makedirs(package_dir) touch('%s/testfile' % package_dir) dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=['config'], dry_run=False) # This should succeed and the directory structure in the repository # should be created since it didn't already exist. df = os.path.join(self.homedir, '.config/gtk-3.0') dotfiles.add([df]) self.assertTrue(os.path.islink(df))
def test_dotdir_file_add_sync_remove(self): """Test that is is possible to add files in dot-directories and that they are managed correctly. This is especially usefull for applications that mix state files and configuration files in their dot-directory, for instance : - .unison which contains *prf and state files - .lftp which contains rc (conf file) and log, cwd_history. """ os.mkdir(os.path.join(self.homedir, '.unison')) os.mkdir(os.path.join(self.homedir, '.lftp')) all_repo_files = ( ('.vimrc', True), ('.unison/home.prf', True), ('.unison/are8d491ed362b0a4cf3e8d77ef3e08a1c', False), ('.unison/fpe8d491ed362b0a4cf3e8d77ef3e08a1c', False), ('.lftp/log', False), ('.lftp/rc', True), ('.lftp/cwd_history', False), ) repo_dir = '.ikiwiki' for homefile, in_repository in all_repo_files: touch(os.path.join(self.homedir, homefile)) os.mkdir(os.path.join(self.homedir, repo_dir)) dotfiles = Dotfiles(homedir=self.homedir, path=self.repository, prefix='', ignore=[], externals={}, packages=[], dry_run=False) dotfiles.add([os.path.join(self.homedir, homefile) for homefile, in_repo in all_repo_files if in_repo]) for homefile, in_repository in all_repo_files: if in_repository: self.verifyFileStatus(homefile) for dotdir in ('.unison', '.lftp'): homepath = os.path.join(self.homedir, dotdir) self.assertTrue(not os.path.islink(homepath)) self.assertTrue(os.path.isdir(homepath)) os.unlink(os.path.join(self.homedir, '.vimrc')) os.unlink(os.path.join(self.homedir, '.lftp/rc')) os.unlink(os.path.join(self.homedir, '.unison/home.prf')) touch(os.path.join(self.homedir, '.unison/home.prf')) dotfiles._load() # refresh file states dotfiles.sync() for homefile in ('.vimrc', '.lftp/rc'): self.verifyFileStatus(homefile) self.assertTrue(not os.path.islink(os.path.join(self.homedir, '.unison/home.prf'))) self.assertTrue(os.path.isfile(os.path.join(self.homedir, '.unison/home.prf'))) dotfiles._load() # refresh file states dotfiles.sync(force=True) self.verifyFileStatus('.unison/home.prf') dotfiles.remove([os.path.join(self.homedir, '.lftp/rc')]) self.assertTrue(not os.path.islink(os.path.join(self.homedir, '.lftp/rc'))) self.assertTrue(os.path.isfile(os.path.join(self.homedir, '.lftp/rc')))