def test_full_scm(self): folder = os.path.join(temp_folder(), "myrepo") url, commit = create_local_git_repo(files={"conan/conanfile.py": self.conanfile, "src/myfile.h": "myheader!", "CMakeLists.txt": "mycmake"}, folder=folder) c = TestClient(default_server_user=True) c.run_command('git clone "{}" .'.format(url)) c.run("create conan") assert "pkg/0.1: MYCMAKE: mycmake" in c.out assert "pkg/0.1: MYFILE: myheader!" in c.out c.run("upload * --all -c") # Do a change and commit, this commit will not be used by package save_files(path=folder, files={"src/myfile.h": "my2header2!"}) git_add_changes_commit(folder=folder) # use another fresh client c2 = TestClient(servers=c.servers) c2.run("install pkg/0.1@ --build=pkg") assert "pkg/0.1: MYCMAKE: mycmake" in c2.out assert "pkg/0.1: MYFILE: myheader!" in c2.out # local flow c.run("install conan") c.run("build conan") assert "conanfile.py (pkg/0.1): MYCMAKE-BUILD: mycmake" in c.out assert "conanfile.py (pkg/0.1): MYFILE-BUILD: myheader!" in c.out
def test_branch_flow(self): """ Testing that when a user creates a branch, and pushes a commit, the package can still be built from sources, and get_url_and_commit() captures the remote URL and not the local """ url = git_create_bare_repo() c = TestClient(default_server_user=True) c.run_command('git clone "{}" .'.format(url)) c.save({"conanfile.py": self.conanfile, "src/myfile.h": "myheader!", "CMakeLists.txt": "mycmake"}) c.run_command("git checkout -b mybranch") git_add_changes_commit(folder=c.current_folder) c.run_command("git push --set-upstream origin mybranch") c.run("create .") assert "pkg/0.1: MYCMAKE: mycmake" in c.out assert "pkg/0.1: MYFILE: myheader!" in c.out c.run("upload * --all -c") rmdir(c.current_folder) # Remove current folder to make sure things are not used from here # use another fresh client c2 = TestClient(servers=c.servers) c2.run("install pkg/0.1@ --build=pkg") assert "pkg/0.1: MYCMAKE: mycmake" in c2.out assert "pkg/0.1: MYFILE: myheader!" in c2.out
def test_clone_checkout(self): folder = os.path.join(temp_folder(), "myrepo") url, commit = create_local_git_repo(files={"src/myfile.h": "myheader!", "CMakeLists.txt": "mycmake"}, folder=folder) # This second commit will NOT be used, as I will use the above commit in the conanfile save_files(path=folder, files={"src/myfile.h": "my2header2!"}) git_add_changes_commit(folder=folder) c = TestClient() c.save({"conanfile.py": self.conanfile.format(url=url, commit=commit)}) c.run("create .") assert "pkg/0.1: MYCMAKE: mycmake" in c.out assert "pkg/0.1: MYFILE: myheader!" in c.out # It also works in local flow c.run("source .") assert "conanfile.py (pkg/0.1): MYCMAKE: mycmake" in c.out assert "conanfile.py (pkg/0.1): MYFILE: myheader!" in c.out assert c.load("source/src/myfile.h") == "myheader!" assert c.load("source/CMakeLists.txt") == "mycmake"
def test_full_scm(self): folder = os.path.join(temp_folder(), "myrepo") conanfile1 = self.conanfile.format(pkg="pkg1", requires="") conanfile2 = self.conanfile.format(pkg="pkg2", requires="requires = 'pkg1/0.1'") url, commit = create_local_git_repo(files={"sub1/conanfile.py": conanfile1, "sub1/src/myfile.h": "myheader1!", "sub1/CMakeLists.txt": "mycmake1!", "sub2/conanfile.py": conanfile2, "sub2/src/myfile.h": "myheader2!", "sub2/CMakeLists.txt": "mycmake2!" }, folder=folder) c = TestClient(default_server_user=True) c.run_command('git clone "{}" .'.format(url)) c.run("create sub1") commit = re.search(r"CAPTURING COMMIT: (\S+)!!!", str(c.out)).group(1) assert "pkg1/0.1: MYCMAKE-BUILD: mycmake1!" in c.out assert "pkg1/0.1: MYFILE-BUILD: myheader1!" in c.out c.save({"sub2/src/myfile.h": "my2header!"}) git_add_changes_commit(folder=c.current_folder) c.run("create sub2") assert "pkg2/0.1: MYCMAKE-BUILD: mycmake2!" in c.out assert "pkg2/0.1: MYFILE-BUILD: my2header!" in c.out # Exporting again sub1, gives us exactly the same revision as before c.run("export sub1") assert "CAPTURING COMMIT: {}".format(commit) in c.out c.run("upload * --all -c -r=default") # use another fresh client c2 = TestClient(servers=c.servers) c2.run("install pkg2/0.1@ --build") assert "pkg1/0.1: Checkout: {}".format(commit) in c2.out assert "pkg1/0.1: MYCMAKE-BUILD: mycmake1!" in c2.out assert "pkg1/0.1: MYFILE-BUILD: myheader1!" in c2.out assert "pkg2/0.1: MYCMAKE-BUILD: mycmake2!" in c2.out assert "pkg2/0.1: MYFILE-BUILD: my2header!" in c2.out
def test_capture_remote_pushed_commit(self): """ a cloned repo, after doing some new commit, no longer commit in remote, until push """ url = git_create_bare_repo() c = TestClient() c.run_command('git clone "{}" myclone'.format(url)) with c.chdir("myclone"): c.save({"conanfile.py": self.conanfile + "\n# some coment!"}) new_commit = git_add_changes_commit(c.current_folder) c.run("export .") assert "This revision will not be buildable in other computer" in c.out assert "pkg/0.1: SCM COMMIT: {}".format(new_commit) in c.out # NOTE: commit not pushed yet, so locally is the current folder assert "pkg/0.1: SCM URL: {}".format(c.current_folder.replace("\\", "/")) in c.out c.run_command("git push") c.run("export .") assert "pkg/0.1: SCM COMMIT: {}".format(new_commit) in c.out assert "pkg/0.1: SCM URL: {}".format(url) in c.out
def test_capture_remote_pushed_commit(self): """ a cloned repo, after doing some new commit, no longer commit in remote, until push """ url = git_create_bare_repo() c = TestClient() c.run_command('git clone "{}" myclone'.format(url)) with c.chdir("myclone"): c.save({"conanfile.py": self.conanfile + "\n# some coment!"}) new_commit = git_add_changes_commit(c.current_folder) c.run("export .") assert "pkg/0.1: COMMIT: {}".format(new_commit) in c.out assert "pkg/0.1: URL: {}".format(url) in c.out assert "pkg/0.1: COMMIT IN REMOTE: False" in c.out assert "pkg/0.1: DIRTY: False" in c.out c.run_command("git push") c.run("export .") assert "pkg/0.1: COMMIT: {}".format(new_commit) in c.out assert "pkg/0.1: URL: {}".format(url) in c.out assert "pkg/0.1: COMMIT IN REMOTE: True" in c.out assert "pkg/0.1: DIRTY: False" in c.out