def test_last_changed_revision(self): project_url, _ = self.create_project(files={'project1/myfile': "contents", 'project2/myfile': "content", 'project2/subdir1/myfile': "content", 'project2/subdir2/myfile': "content", }) prj1 = SVN(folder=self.gimme_tmp()) prj1.checkout(url='/'.join([project_url, 'project1'])) prj2 = SVN(folder=self.gimme_tmp()) prj2.checkout(url='/'.join([project_url, 'project2'])) self.assertEqual(prj1.get_last_changed_revision(), prj2.get_last_changed_revision()) # Modify file in one subfolder of prj2 with open(os.path.join(prj2.folder, "subdir1", "myfile"), "a") as f: f.write("new content") prj2.run('commit -m "add to file"') prj2.run('update') prj1.run('update') self.assertNotEqual(prj1.get_last_changed_revision(), prj2.get_last_changed_revision()) self.assertEqual(prj1.get_revision(), prj2.get_revision()) # Instantiate a SVN in the other subfolder prj2_subdir2 = SVN(folder=os.path.join(prj2.folder, "subdir2")) prj2_subdir2.run('update') self.assertEqual(prj2.get_last_changed_revision(), prj2_subdir2.get_last_changed_revision()) self.assertNotEqual(prj2.get_last_changed_revision(use_wc_root=False), prj2_subdir2.get_last_changed_revision(use_wc_root=False))
def test_revision_number(self): svn = SVN(folder=self.gimme_tmp()) svn.checkout(url=self.repo_url) rev = int(svn.get_revision()) self.create_project(files={'another_file': "content"}) svn.run("update") rev2 = int(svn.get_revision()) self.assertEqual(rev2, rev + 1)
def test_checkout(self): # Ensure we have several revisions in the repository self.create_project(files={'file': "content"}) self.create_project(files={'file': "content"}) svn = SVN(folder=self.gimme_tmp()) svn.checkout(url=self.repo_url) rev = int(svn.get_revision()) svn.update(revision=rev - 1) # Checkout previous revision self.assertTrue(int(svn.get_revision()), rev - 1)
def test_auto_svn(self): conanfile = base_svn.format(directory="None", url=_quoted("auto"), revision="auto") project_url, _ = self.create_project(files={"conanfile.py": conanfile, "myfile.txt": "My file is copied"}) project_url = project_url.replace(" ", "%20") self.client.run_command('svn co "{url}" "{path}"'.format(url=project_url, path=self.client.current_folder)) curdir = self.client.current_folder.replace("\\", "/") # Create the package, will copy the sources from the local folder self.client.run("create . user/channel") self.assertIn("Repo origin deduced by 'auto': {}".format(project_url).lower(), str(self.client.out).lower()) self.assertIn("Revision deduced by 'auto'", self.client.out) self.assertIn("SCM: Getting sources from folder: %s" % curdir, self.client.out) self.assertIn("My file is copied", self.client.out) # Export again but now with absolute reference, so no pointer file is created nor kept svn = SVN(curdir) self.client.save({"conanfile.py": base_svn.format(url=_quoted(svn.get_remote_url()), revision=svn.get_revision())}) self.client.run("create . user/channel") self.assertNotIn("Repo origin deduced by 'auto'", self.client.out) self.assertNotIn("Revision deduced by 'auto'", self.client.out) self.assertIn("SCM: Getting sources from url: '{}'".format(project_url).lower(), str(self.client.out).lower()) self.assertIn("My file is copied", self.client.out)
def test_local_source(self): curdir = self.client.current_folder.replace("\\", "/") conanfile = base_svn.format(url=_quoted("auto"), revision="auto") conanfile += """ def source(self): self.output.warn("SOURCE METHOD CALLED") """ project_url, _ = self.create_project(files={ "conanfile.py": conanfile, "myfile.txt": "My file is copied" }) project_url = project_url.replace(" ", "%20") self.client.run_command('svn co "{url}" "{path}"'.format( url=project_url, path=self.client.current_folder)) self.client.save({"aditional_file.txt": "contents"}) self.client.run("source . --source-folder=./source") self.assertTrue( os.path.exists(os.path.join(curdir, "source", "myfile.txt"))) self.assertIn("SOURCE METHOD CALLED", self.client.out) # Even the not commited files are copied self.assertTrue( os.path.exists(os.path.join(curdir, "source", "aditional_file.txt"))) self.assertIn("SCM: Getting sources from folder: %s" % curdir, self.client.out) # Export again but now with absolute reference, so no pointer file is created nor kept svn = SVN(curdir) conanfile = base_svn.format(url=_quoted(svn.get_remote_url()), revision=svn.get_revision()) conanfile += """ def source(self): self.output.warn("SOURCE METHOD CALLED") """ self.client.save({ "conanfile.py": conanfile, "myfile2.txt": "My file is copied" }) self.client.run_command("svn add myfile2.txt") self.client.run_command('svn commit -m "commiting"') self.client.run("source . --source-folder=./source2") # myfile2 is no in the specified commit self.assertFalse( os.path.exists(os.path.join(curdir, "source2", "myfile2.txt"))) self.assertTrue( os.path.exists(os.path.join(curdir, "source2", "myfile.txt"))) self.assertIn( "SCM: Getting sources from url: '{}'".format(project_url).lower(), str(self.client.out).lower()) self.assertIn("SOURCE METHOD CALLED", self.client.out)
class SVNToolTestsPristineWithExternalsFixed(SVNLocalRepoTestCase): def _propset_cmd(self, relpath, rev, url): return 'propset svn:externals "{} -r{} {}" .'.format(relpath, rev, url) def setUp(self): project_url, _ = self.create_project(files={'myfile': "contents"}) project2_url, rev = self.create_project( files={'nestedfile': "contents"}) self.svn = SVN(folder=self.gimme_tmp()) self.svn.checkout(url=project_url) self.svn.run(self._propset_cmd("subrepo", rev, project2_url)) self.svn.run('commit -m "add external"') self.svn.update() self.assertTrue(self.svn.is_pristine()) self.svn_subrepo = SVN(folder=os.path.join(self.svn.folder, 'subrepo')) self.assertTrue(self.svn_subrepo.is_pristine()) def test_modified_external(self): with open(os.path.join(self.svn.folder, "subrepo", "nestedfile"), "a") as f: f.write("cosass") self.assertFalse(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) def test_commit_external(self): with open(os.path.join(self.svn.folder, "subrepo", "nestedfile"), "a") as f: f.write("cosass") self.svn_subrepo.run('commit -m "up external"') self.assertFalse(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) self.svn_subrepo.update() self.assertTrue(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) def test_untracked_external(self): with open(os.path.join(self.svn.folder, "subrepo", "other_file"), "w") as f: f.write("cosass") self.assertFalse(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) def test_ignored_external(self): file_to_ignore = "secret.txt" with open(os.path.join(self.svn_subrepo.folder, file_to_ignore), "w") as f: f.write("cosas") self.svn_subrepo.run("propset svn:ignore {} .".format(file_to_ignore)) self.assertFalse(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) self.svn_subrepo.run('commit -m "add ignored file"') self.assertTrue(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) subrepo_rev = self.svn_subrepo.get_revision() self.svn.run( self._propset_cmd("subrepo", subrepo_rev, self.svn_subrepo.get_remote_url())) self.assertTrue(self.svn_subrepo.is_pristine()) self.assertFalse(self.svn.is_pristine()) self.svn.run('commit -m "change property"') self.svn.update() self.assertTrue(self.svn.is_pristine())