def test_update_from_same_revision_test(self): """ If I specify conan install ref#revision --update it has to update to the latest binary of the same recipe. """ conanfile = """ import time import os from conans import ConanFile, tools class ConanFileToolsTest(ConanFile): def package(self): tools.save(os.path.join(self.package_folder, "file.txt"), str(time.time())) """ ref = ConanFileReference.loads("Hello/0.1@lasote/stable") # Generate recipe rev 1 + package rev1 to remote0 self.client.save({"conanfile.py": conanfile}) self.client.run("create . %s" % str(ref)) self.client.run("upload %s -r=remote0 --all" % str(ref)) rev1 = self.client.get_revision(ref) package_ref = PackageReference(ref.copy_with_rev(rev1), NO_SETTINGS_PACKAGE_ID) prev1 = self.client.servers[ "remote0"].server_store.get_last_package_revision( package_ref).revision # Use another client to install the only binary revision for ref client2 = TestClient(servers=self.servers, users=self.users) client2.run("install %s" % str(ref)) # Generate recipe rev1 + package rev2 to remote0 time.sleep(1) self.client.run("remove %s -f" % str(ref)) self.client.run("create . %s" % str(ref)) self.client.run("upload %s -r=remote0 --all" % str(ref)) rev1_ = self.client.get_revision(ref) self.assertEquals(rev1, rev1_) package_ref = PackageReference(ref.copy_with_rev(rev1), NO_SETTINGS_PACKAGE_ID) prev2 = self.client.servers[ "remote0"].server_store.get_last_package_revision( package_ref).revision self.assertNotEqual(prev1, prev2) # Verify a new package revision is uploaded # Generate another recipe revision (and also bin revision) self.client.save({"conanfile.py": conanfile + "\n"}) self.client.run("create . %s" % str(ref)) self.client.run("upload %s -r=remote0 --all" % str(ref)) # So, from client2 I install --update pinning the first recipe revision, # I don't want the recipe to be updated but the binary client2.run("install %s#%s --update" % (str(ref), rev1)) self.assertNotIn("Hello/0.1@lasote/stable from 'remote0' - Updated", client2.out) self.assertIn( "Hello/0.1@lasote/stable:" "5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Update", client2.out) prev_ = client2.get_package_revision(package_ref) self.assertEquals(prev_, prev2)
def upload_dirty_test(self): test_server = TestServer([], users={"lasote": "mypass"}) client = TestClient(servers={"default": test_server}, users={"default": [("lasote", "mypass")]}) client.save({"conanfile.py": str(TestConanFile())}) client.run("export . lasote/testing") ref = ConanFileReference.loads("Hello/0.1@lasote/testing") pkg_ref = PackageReference(ref, "12345") package_folder = client.client_cache.package(pkg_ref) recipe_rev = client.get_revision(ref) p_rev = client.get_package_revision(pkg_ref) with client.client_cache.update_metadata(pkg_ref.conan) as metadata: metadata.packages[pkg_ref.package_id].revision = p_rev metadata.packages[pkg_ref.package_id].recipe_revision = recipe_rev save(os.path.join(package_folder, "conanmanifest.txt"), "888") set_dirty(package_folder) client.run("upload * --all --confirm", assert_error=True) self.assertIn( "ERROR: Package Hello/0.1@lasote/testing:12345 is corrupted, aborting upload", client.out) self.assertIn( "Remove it with 'conan remove Hello/0.1@lasote/testing -p=12345'", client.out) client.run("remove Hello/0.1@lasote/testing -p=12345 -f") client.run("upload * --all --confirm")