def test_update_tag_to_tag(west_init_tmpdir): # Verify we can update the tagged_repo repo to a new tag. # We only need to clone tagged_repo locally. cmd('update tagged_repo') def updater(remotes): # Create a v2.0 tag on the remote tagged_repo repository. add_commit(remotes.tagged_repo, 'another tagged_repo tagged commit') add_tag(remotes.tagged_repo, 'v2.0') # Update the manifest file to point the project's revision at # the new tag. manifest = Manifest.from_file(topdir=west_init_tmpdir) for p in manifest.projects: if p.name == 'tagged_repo': p.revision = 'v2.0' break else: assert False, 'no tagged_repo' with open(west_init_tmpdir / 'zephyr' / 'west.yml', 'w') as f: f.write(manifest.as_yaml()) # NOT as_frozen_yaml(). # Pull down the v2.0 tag into west_init_tmpdir. cmd('update tagged_repo') ur = update_helper(west_init_tmpdir, updater=updater) # Make sure we have manifest-rev and HEADs before and after. assert ur.tr_mr_0 assert ur.tr_mr_1 assert ur.tr_head_0 assert ur.tr_head_1 # Make sure we have v1.0 and v2.0 tags locally. v1_0 = check_output([GIT, 'rev-parse', 'refs/tags/v1.0^{commit}'], cwd=ur.tr_local) v2_0 = check_output([GIT, 'rev-parse', 'refs/tags/v2.0^{commit}'], cwd=ur.tr_local) assert v1_0 assert v2_0 # Check that all the updates (including the first one in this # function) behaved correctly. assert ur.tr_mr_0 == v1_0 assert ur.tr_mr_1 == v2_0 assert ur.tr_head_0 == v1_0 assert ur.tr_head_1 == v2_0
def output_or_none(*args, **kwargs): try: ret = check_output(*args, **kwargs) except (FileNotFoundError, NotADirectoryError, subprocess.CalledProcessError): ret = None return ret
def update_helper(west_tmpdir, command): # Helper command for causing a change in two remote repositories, # then running a project command on the west installation. # # Adds a commit to both of the kconfiglib and net-tools projects # remotes, then run `command`. # # Captures the 'manifest-rev' and HEAD SHAs in both repositories # before and after running the command, returning them in a tuple # like this: # # (net-tools-manifest-rev-before, # net-tools-manifest-rev-after, # net-tools-HEAD-before, # net-tools-HEAD-after, # kconfiglib-manifest-rev-before, # kconfiglib-manifest-rev-after, # kconfiglib-HEAD-before, # kconfiglib-HEAD-after) nt_remote = str(west_tmpdir.join('..', 'repos', 'net-tools')) nt_local = str(west_tmpdir.join('net-tools')) kl_remote = str(west_tmpdir.join('..', 'repos', 'Kconfiglib')) kl_local = str(west_tmpdir.join('subdir', 'Kconfiglib')) nt_mr_0 = check_output([GIT, 'rev-parse', 'manifest-rev'], cwd=nt_local) kl_mr_0 = check_output([GIT, 'rev-parse', 'manifest-rev'], cwd=kl_local) nt_head_0 = check_output([GIT, 'rev-parse', 'HEAD'], cwd=nt_local) kl_head_0 = check_output([GIT, 'rev-parse', 'HEAD'], cwd=kl_local) add_commit(nt_remote, 'another net-tools commit') add_commit(kl_remote, 'another kconfiglib commit') cmd(command) nt_mr_1 = check_output([GIT, 'rev-parse', 'manifest-rev'], cwd=nt_local) kl_mr_1 = check_output([GIT, 'rev-parse', 'manifest-rev'], cwd=kl_local) nt_head_1 = check_output([GIT, 'rev-parse', 'HEAD'], cwd=nt_local) kl_head_1 = check_output([GIT, 'rev-parse', 'HEAD'], cwd=kl_local) return (nt_mr_0, nt_mr_1, nt_head_0, nt_head_1, kl_mr_0, kl_mr_1, kl_head_0, kl_head_1)