def test_git_subdir_is_dirty_modified_outside(self): with open(join(REPODIR, 'ignored_in_root.txt'), 'a') as f: f.write("\nmore content\n") self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_is_dirty_modified(self): with open(join(REPODIR, 'subdir/to_be_kept.txt'), 'a') as f: f.write("\nmore content\n") self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_subdir_is_dirty_added_outside(self): makefile('added.txt', 'this will be added') self._git_add(['added.txt']) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def snapshot(self) -> Tuple[Optional[str], Optional[str]]: if self.compute_hash: h = hashtree.generate_sha_signature(self.rsrcdir, self.local_path, ignore=self.ignore, verbose=self.workspace.verbose) else: h = hashtree.generate_size_signature( self.rsrcdir, self.local_path, ignore=self.ignore, verbose=self.workspace.verbose) assert os.path.exists(os.path.join(self.rsrcdir, h)) if isinstance(self.workspace, git_backend.Workspace): workspace_path = self.workspace.get_workspace_local_path_if_any() assert workspace_path is not None if is_git_staging_dirty( workspace_path, subdir=_relative_rsrc_dir_for_git_workspace( self.role, self.name)): call_subprocess( [ GIT_EXE_PATH, "commit", "-m", "Add snapshot hash files for resource %s" % self.name, ], cwd=workspace_path, verbose=self.workspace.verbose, ) return (h, None)
def test_commit_filename_with_spaces(self): """See issue #79 (https://github.com/data-workspaces/data-workspaces-core/issues/79) Files with spaces returned by git status --porcelain are in quotes! """ os.mkdir(join(REPODIR, 'subdir')) makefile('subdir/to_be_deleted.txt', 'this file will be deleted') makefile('subdir/to_be_left_alone.txt', 'this file to be left alone') makefile('subdir/to be modified.txt', 'this file to be modified') makefile('root_file1.txt', 'this should not be changed') self._git_add([ 'subdir/to_be_deleted.txt', 'subdir/to_be_left_alone.txt', 'subdir/to be modified.txt', 'root_file1.txt' ]) self._run(['commit', '-m', 'initial version']) os.remove(join(REPODIR, 'subdir/to_be_deleted.txt')) with open(join(REPODIR, 'subdir/to be modified.txt'), 'a') as f: f.write("Adding another line to file!\n") makefile('subdir/to_be_added.txt', 'this file was added') commit_changes_in_repo_subdir(REPODIR, 'subdir', 'testing applied changes', verbose=True) self.assertFalse(is_git_dirty(REPODIR), "Git still dirty after commit!") self.assert_file_exists('subdir/to_be_left_alone.txt') self.assert_file_exists('subdir/to be modified.txt') self.assert_file_exists('subdir/to_be_added.txt') self.assert_file_not_exists('subdir/to_be_deleted.txt') self.assert_file_exists('root_file1.txt') # verify that staged files outside of the subdir are not changed makefile('staged_but_not_committed.txt', 'should be staged but not committed') self._git_add(['staged_but_not_committed.txt']) commit_changes_in_repo_subdir(REPODIR, 'subdir', 'testing not committing', verbose=True) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_commit(self): os.mkdir(join(REPODIR, 'subdir')) makefile('subdir/to_be_deleted.txt', 'this file will be deleted') makefile('subdir/to_be_left_alone.txt', 'this file to be left alone') makefile('subdir/to_be_modified.txt', 'this file to be modified') makefile('root_file1.txt', 'this should not be changed') self._git_add([ 'subdir/to_be_deleted.txt', 'subdir/to_be_left_alone.txt', 'subdir/to_be_modified.txt', 'root_file1.txt' ]) self._run(['commit', '-m', 'initial version']) os.remove(join(REPODIR, 'subdir/to_be_deleted.txt')) with open(join(REPODIR, 'subdir/to_be_modified.txt'), 'a') as f: f.write("Adding another line to file!\n") makefile('subdir/to_be_added.txt', 'this file was added') commit_changes_in_repo_subdir(REPODIR, 'subdir', 'testing applied changes', verbose=True) self.assertFalse(is_git_dirty(REPODIR), "Git still dirty after commit!") self.assert_file_exists('subdir/to_be_left_alone.txt') self.assert_file_exists('subdir/to_be_modified.txt') self.assert_file_exists('subdir/to_be_added.txt') self.assert_file_not_exists('subdir/to_be_deleted.txt') self.assert_file_exists('root_file1.txt') # verify that staged files outside of the subdir are not changed makefile('staged_but_not_committed.txt', 'should be staged but not committed') self._git_add(['staged_but_not_committed.txt']) commit_changes_in_repo_subdir(REPODIR, 'subdir', 'testing not committing', verbose=True) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_is_dirty_clean(self): self.assertFalse(is_git_dirty(REPODIR)) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_subdir_is_dirty_deleted_in_staging_outside(self): self._run(['rm', 'ignored_in_root.txt']) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_subdir_is_dirty_deleted_outside(self): os.remove(join(REPODIR, 'ignored_in_root.txt')) self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_subdir_is_dirty_untracked_outside(self): makefile('untracked.txt', 'this is untracked') self.assertFalse(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_is_dirty_deleted_in_staging(self): self._run(['rm', 'subdir/to_be_deleted.txt']) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertTrue(is_git_staging_dirty(REPODIR)) self.assertTrue(is_git_staging_dirty(REPODIR, 'subdir'))
def test_git_is_dirty_deleted(self): os.remove(join(REPODIR, 'subdir/to_be_deleted.txt')) self.assertTrue(is_git_dirty(REPODIR)) self.assertTrue(is_git_subdir_dirty(REPODIR, 'subdir')) self.assertFalse(is_git_staging_dirty(REPODIR)) self.assertFalse(is_git_staging_dirty(REPODIR, 'subdir'))