Esempio n. 1
0
 def work_on_project(tmp_folder):
     svn = SVN(folder=tmp_folder)
     svn.checkout(url=project_url)
     self.assertTrue(svn.is_pristine())
     with open(os.path.join(tmp_folder, "myfile"), "a") as f:
         f.write("random content: {}".format(uuid.uuid4()))
     return svn
Esempio n. 2
0
class SVNToolTestsPristineWithExternalsNotFixed(SVNLocalRepoTestCase):
    def _propset_cmd(self, relpath, url):
        return 'propset svn:externals "{} {}" .'.format(relpath, url)

    def setUp(self):
        project_url, _ = self.create_project(files={'myfile': "contents"})
        project2_url, _ = 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", project2_url))
        self.svn.run('commit -m "add external"')
        self.svn.update()
        self.assertTrue(self.svn.is_pristine())

        self.svn2 = SVN(folder=self.gimme_tmp())
        self.svn2.checkout(url=project2_url)
        self.assertTrue(self.svn.is_pristine())

    def test_modified_external(self):
        with open(os.path.join(self.svn2.folder, "nestedfile"), "a") as f:
            f.write("cosass")
        self.svn2.run('commit -m "another"')
        self.svn2.update()
        self.assertTrue(self.svn2.is_pristine())

        # Known: without fixed external, it won't be pristine if there is something new in remote.
        self.assertFalse(self.svn.is_pristine())
Esempio n. 3
0
    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))
Esempio n. 4
0
    def test_checkout_project(self):
        project_url, _ = self.create_project(files={'myfile': "contents"})

        tmp_folder = self.gimme_tmp()
        svn = SVN(folder=tmp_folder)
        svn.checkout(url=project_url)
        self.assertTrue(svn.is_pristine())
Esempio n. 5
0
    def test_verify_ssl(self):
        class MyRunner(object):
            def __init__(self, svn):
                self.calls = []
                self._runner = svn._runner
                svn._runner = self

            def __call__(self, command, *args, **kwargs):
                self.calls.append(command)
                return self._runner(command, *args, **kwargs)

        project_url, _ = self.create_project(files={'myfile': "contents",
                                                    'subdir/otherfile': "content"})

        svn = SVN(folder=self.gimme_tmp(), username="******", password="******", verify_ssl=True)
        runner = MyRunner(svn)
        svn.checkout(url=project_url)
        self.assertNotIn("--trust-server-cert-failures=unknown-ca", runner.calls[1])

        svn = SVN(folder=self.gimme_tmp(), username="******", password="******", verify_ssl=False)
        runner = MyRunner(svn)
        svn.checkout(url=project_url)
        if svn.version >= SVN.API_CHANGE_VERSION:
            self.assertIn("--trust-server-cert-failures=unknown-ca", runner.calls[1])
        else:
            self.assertIn("--trust-server-cert", runner.calls[1])
Esempio n. 6
0
 def test_mixed_revisions(self):
     project_url, _ = self.create_project(files={'myfile': "cc", 'another': 'aa'})
     svn = SVN(folder=self.gimme_tmp())
     svn.checkout(url=project_url)
     with open(os.path.join(svn.folder, 'myfile'), "a") as f:
         f.write('more')
     svn.run('commit -m "up version"')
     self.assertFalse(svn.is_pristine())
Esempio n. 7
0
 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)
Esempio n. 8
0
 def test_modified_file(self):
     project_url, _ = self.create_project(files={'myfile': "contents"})
     tmp_folder = self.gimme_tmp()
     svn = SVN(folder=tmp_folder)
     svn.checkout(url=project_url)
     with open(os.path.join(tmp_folder, "myfile"), "a") as f:
         f.write("new content")
     self.assertFalse(svn.is_pristine())
Esempio n. 9
0
    def test_repo_url(self):
        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(url=self.repo_url)
        remote_url = svn.get_remote_url()
        self.assertEqual(remote_url.lower(), self.repo_url.lower())

        svn2 = SVN(folder=self.gimme_tmp(create=False))
        svn2.checkout(url=remote_url)  # clone using quoted url
        self.assertEqual(svn2.get_remote_url().lower(), self.repo_url.lower())
Esempio n. 10
0
 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)
Esempio n. 11
0
 def test_untracked_file(self):
     self.create_project(files={'myfile': "contents"})
     tmp_folder = self.gimme_tmp()
     svn = SVN(folder=tmp_folder)
     svn.checkout(url=self.repo_url)
     self.assertTrue(svn.is_pristine())
     with open(os.path.join(tmp_folder, "not_tracked.txt"), "w") as f:
         f.write("content")
     self.assertFalse(svn.is_pristine())
Esempio n. 12
0
 def test_ignored_file(self):
     tmp_folder = self.gimme_tmp()
     svn = SVN(folder=self.gimme_tmp())
     svn.checkout(url=self.repo_url)
     file_to_ignore = "secret.txt"
     with open(os.path.join(tmp_folder, file_to_ignore), "w") as f:
         f.write("content")
     svn.run("propset svn:ignore {} .".format(file_to_ignore))
     self.assertFalse(svn.is_pristine())  # Folder properties have been modified
     svn.run('commit -m "add ignored file"')
     self.assertTrue(svn.is_pristine())
Esempio n. 13
0
 def test_check_svn_repo(self):
     project_url, _ = self.create_project(files={'myfile': "contents"})
     tmp_folder = self.gimme_tmp()
     svn = SVN(folder=tmp_folder)
     with six.assertRaisesRegex(self, ConanException, "Not a valid 'svn' repository"):
         svn.check_repo()
     svn.checkout(url=project_url)
     try:
         svn.check_repo()
     except Exception:
         self.fail("After checking out, it should be a valid SVN repository")
Esempio n. 14
0
    def test_missing_remote(self):
        repo_url = self.gimme_tmp()
        subprocess.check_output('svnadmin create "{}"'.format(repo_url), shell=True)
        project_url = SVN.file_protocol + quote(repo_url.replace("\\", "/"), safe='/:')

        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(url=project_url)
        self.assertTrue(svn.is_pristine())

        shutil.rmtree(repo_url, ignore_errors=False, onerror=try_remove_readonly)
        self.assertFalse(os.path.exists(repo_url))
        self.assertFalse(svn.is_pristine())
Esempio n. 15
0
    def test_tag(self):
        project_url, _ = self.create_project(
            files={
                'prj1/trunk/myfile': "contents",
                'prj1/branches/my_feature/myfile': "",
                'prj1/branches/issue3434/myfile': "",
                'prj1/tags/v12.3.4/myfile': "",
            })
        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(url='/'.join([project_url, 'prj1', 'trunk']))
        self.assertIsNone(svn.get_tag())

        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(
            url='/'.join([project_url, 'prj1', 'branches', 'my_feature']))
        self.assertIsNone(svn.get_tag())

        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(
            url='/'.join([project_url, 'prj1', 'branches', 'issue3434']))
        self.assertIsNone(svn.get_tag())

        svn = SVN(folder=self.gimme_tmp())
        svn.checkout(url='/'.join([project_url, 'prj1', 'tags', 'v12.3.4']))
        self.assertEqual("v12.3.4", svn.get_tag())

        svn = SVN(folder=self.gimme_tmp())
        with six.assertRaisesRegex(self, ConanException,
                                   "Unable to get svn tag"):
            svn.get_tag()
Esempio n. 16
0
    def svn_revision_message_test(self):
        tmp_folder = self.gimme_tmp()
        svn = SVN(folder=tmp_folder)
        svn.checkout(url=self.repo_url)
        self.assertIsNone(svn.get_revision_message())

        new_file = os.path.join(tmp_folder, "new_file")
        with open(new_file, "w") as f:
            f.write("content")

        svn.run('add new_file')
        svn.run('commit -m "add to file"')
        svn.run('update')
        self.assertEqual("add to file", svn.get_revision_message())
Esempio n. 17
0
    def test_repo_root(self):
        project_url, _ = self.create_project(files={'myfile': "contents",
                                                    'subdir/otherfile': "content"})
        tmp_folder = self.gimme_tmp()
        svn = SVN(folder=tmp_folder)
        svn.checkout(url=project_url)

        path = os.path.realpath(tmp_folder).replace('\\', '/').lower()
        self.assertEqual(path, svn.get_repo_root().lower())

        # SVN instantiated in a subfolder
        svn2 = SVN(folder=os.path.join(tmp_folder, 'subdir'))
        self.assertFalse(svn2.folder == tmp_folder)
        path = os.path.realpath(tmp_folder).replace('\\', '/').lower()
        self.assertEqual(path, svn2.get_repo_root().lower())
Esempio n. 18
0
    def test_clone_over_dirty_directory(self):
        project_url, _ = self.create_project(files={'myfile': "contents"})
        tmp_folder = self.gimme_tmp()
        svn = SVN(folder=tmp_folder)
        svn.checkout(url=project_url)

        new_file = os.path.join(tmp_folder, "new_file")
        with open(new_file, "w") as f:
            f.write("content")

        mod_file = os.path.join(tmp_folder, "myfile")
        with open(mod_file, "a") as f:
            f.write("new content")

        self.assertFalse(svn.is_pristine())
        # SVN::clone over a dirty repo reverts all changes
        # (but it doesn't delete non versioned files)
        svn.checkout(url=project_url)
        self.assertEqual(open(mod_file).read(), "contents")
        self.assertFalse(svn.is_pristine())
Esempio n. 19
0
class SVNToolTestsPristineWithExternalFile(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_nestedfile", rev, project2_url + '/nestedfile'))
        self.svn.run('commit -m "add external"')
        self.svn.update()
        self.assertTrue(self.svn.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.is_pristine())
Esempio n. 20
0
    def test_excluded_files(self):
        project_url, _ = self.create_project(files={'myfile': "contents"})
        tmp_folder = self.gimme_tmp()
        svn = SVN(folder=tmp_folder)
        svn.checkout(url=project_url)

        # Add untracked file
        new_file = os.path.join(tmp_folder, str(uuid.uuid4()))
        with open(new_file, "w") as f:
            f.write("content")

        # Add ignore file
        file_to_ignore = str(uuid.uuid4())
        with open(os.path.join(tmp_folder, file_to_ignore), "w") as f:
            f.write("content")
        svn.run("propset svn:ignore {} .".format(file_to_ignore))
        svn.run('commit -m "add ignored file"')

        excluded_files = svn.excluded_files()
        self.assertIn(file_to_ignore, excluded_files)
        self.assertNotIn('.svn', excluded_files)
        self.assertEqual(len(excluded_files), 1)
Esempio n. 21
0
 def test_repo_project_url(self):
     project_url, _ = self.create_project(files={"myfile": "content"})
     svn = SVN(folder=self.gimme_tmp())
     svn.checkout(url=project_url)
     self.assertEqual(svn.get_remote_url().lower(), project_url.lower())
Esempio n. 22
0
 def test_clone(self):
     project_url, _ = self.create_project(files={'myfile': "contents"})
     tmp_folder = self.gimme_tmp()
     svn = SVN(folder=tmp_folder)
     svn.checkout(url=project_url)
     self.assertTrue(os.path.exists(os.path.join(tmp_folder, 'myfile')))
Esempio n. 23
0
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())
Esempio n. 24
0
 def test_is_local_repository(self):
     svn = SVN(folder=self.gimme_tmp())
     svn.checkout(url=self.repo_url)
     self.assertTrue(svn.is_local_repository())
Esempio n. 25
0
 def test_checkout(self):
     svn = SVN(folder=self.gimme_tmp())
     svn.checkout(url=self.repo_url)
     self.assertTrue(svn.is_pristine())