def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = set(getTags(getBaseTag(release['product'], release['version']), release['buildNumber'])) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile'] ) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) # This is true 99% of the time. It's exceedingly rare that we ship a point # release that we first push to the beta channel. If we need to, the # expectation is that this will be ignored by hardcoding True in the # template. if isFinalRelease(release["version"]): subs["betaChannelEnabled"] = True else: subs["betaChannelEnabled"] = False with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = set( getTags(getBaseTag(release['product'], release['version']), release['buildNumber'])) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile']) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = getTags(getBaseTag(release['product'], release['version']), release['buildNumber']) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile'] ) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def tag_and_push(repo, attempt): update(workdir, branch) tag(workdir, tags, rev=branch, force=True, user=hg_username) log.info("Tagged %s, attempt #%s" % (repo, attempt))
def testMultitagWithRevision(self): tag(self.repodir, ['tag1', 'tag2'], rev='1') info = getRevInfo(self.repodir, '1') self.assertEquals(['tag1', 'tag2'], info['tags'])
def testTagWithMsg(self): rev = tag(self.repodir, ['tag'], msg='I made a tag!') info = getRevInfo(self.repodir, rev) self.assertEquals('I made a tag!', info['msg'])
def testTag(self): tag(self.repodir, ['test_tag']) self.assertTrue('test_tag' in getTags(self.repodir))
def main(): logging.basicConfig(format="%(asctime)s - %(message)s", level=logging.INFO) parser = argparse.ArgumentParser() parser.add_argument("--from-dir", default="mozilla-beta", help="Working directory of repo to be merged from") parser.add_argument("--from-repo", default="ssh://hg.mozilla.org/releases/mozilla-beta", help="Repo to be merged from") parser.add_argument("--to-dir", default="mozilla-release", help="Working directory of repo to be merged to") parser.add_argument( "--to-repo", default="ssh://hg.mozilla.org/releases/mozilla-release", help="Repo to be merged to") parser.add_argument("--hg-user", default="ffxbld <*****@*****.**>", help="Mercurial username to be passed to hg -u") parser.add_argument("--remove-locale", dest="remove_locales", action="append", required=True, help="Locales to be removed from release shipped-locales") args = parser.parse_args() from_dir = args.from_dir to_dir = args.to_dir from_repo = args.from_repo to_repo = args.to_repo hg_user = args.hg_user with retrying(mercurial) as clone: for (d, repo) in ((from_dir, from_repo), (to_dir, to_repo)): clone(repo, d) log.info("Cleaning up %s...", d) strip_outgoing(d) update(d, branch="default") beta_rev = get_revision(from_dir) release_rev = get_revision(to_dir) now = datetime.datetime.now() date = now.strftime("%Y%m%d") # TODO: make this tag consistent with other branches release_base_tag = "RELEASE_BASE_" + date log.info("Tagging %s beta with %s", beta_rev, release_base_tag) tag(from_dir, tags=[release_base_tag], rev=beta_rev, user=hg_user, msg="Added %s tag for changeset %s. DONTBUILD CLOSED TREE a=release" % (release_base_tag, beta_rev)) new_beta_rev = get_revision(from_dir) raw_input("Push mozilla-beta and hit Return") pull(from_dir, dest=to_dir) merge_via_debugsetparents( to_dir, old_head=release_rev, new_head=new_beta_rev, user=hg_user, msg="Merge old head via |hg debugsetparents %s %s|. " "CLOSED TREE DONTBUILD a=release" % (new_beta_rev, release_rev)) replace( path.join(to_dir, "browser/confvars.sh"), "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-beta,firefox-mozilla-release", "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-release") replace(path.join(to_dir, "browser/confvars.sh"), "MAR_CHANNEL_ID=firefox-mozilla-beta", "MAR_CHANNEL_ID=firefox-mozilla-release") for d in branding_dirs: for f in branding_files: replace( path.join(to_dir, d, f), "ac_add_options --with-branding=mobile/android/branding/beta", "ac_add_options --with-branding=mobile/android/branding/official") if args.remove_locales: log.info("Removing locales: %s", args.remove_locales) remove_locales(path.join(to_dir, "browser/locales/shipped-locales"), args.remove_locales) log.warn("Apply any manual changes, such as disabling features.") raw_input("Hit 'return' to display channel, branding, and feature diffs onscreen") run_cmd(["hg", "diff"], cwd=to_dir) raw_input("If the diff looks good hit return to commit those changes") commit(to_dir, user=hg_user, msg="Update configs. CLOSED TREE a=release ba=release") raw_input("Go ahead and push mozilla-release changes.")
def testForcedTag(self): run_cmd(['hg', 'tag', '-R', self.repodir, 'tag']) tag(self.repodir, ['tag'], force=True) self.assertTrue('tag' in getTags(self.repodir))
def testTagWithMsg(self): rev = tag(self.repodir, ["tag"], msg="I made a tag!") info = getRevInfo(self.repodir, rev) self.assertEquals("I made a tag!", info["msg"])
def testMultitagSet(self): tag(self.repodir, set(["tag1", "tag5"])) tags = getTags(self.repodir) self.assertTrue("tag1" in tags) self.assertTrue("tag5" in tags)
def testMultitag(self): tag(self.repodir, ["tag1", "tag2"]) tags = getTags(self.repodir) self.assertTrue("tag1" in tags) self.assertTrue("tag2" in tags)
def testTag(self): tag(self.repodir, ["test_tag"]) self.assertTrue("test_tag" in getTags(self.repodir))
def main(): logging.basicConfig(format="%(asctime)s - %(message)s", level=logging.INFO) parser = argparse.ArgumentParser() parser.add_argument("--hg-user", default="ffxbld <*****@*****.**>", help="Mercurial username to be passed to hg -u") args = parser.parse_args() hg_user = args.hg_user # prep the repos for d, repo in ((mc_dir, mc_repo), (ma_dir, ma_repo), (mb_dir, mb_repo)): mercurial(repo, d) log.info("Cleaning up %s...", d) strip_outgoing(d) update(d, branch="default") curr_mc_version = get_major_version(mc_dir) curr_ma_version = get_major_version(ma_dir) curr_mb_version = get_major_version(mb_dir) next_mc_version = str(int(curr_mc_version) + 1) next_ma_version = str(int(curr_ma_version) + 1) next_mb_version = str(int(curr_mb_version) + 1) # mozilla-central mc_revision = get_revision(mc_dir) mc_tag = "FIREFOX_AURORA_%s_BASE" % curr_mc_version tag(mc_dir, tags=[mc_tag], rev=mc_revision, user=hg_user, msg= "Added %s tag for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (mc_tag, mc_revision)) new_mc_revision = get_revision(mc_dir) bump_version(mc_dir, curr_mc_version, next_mc_version, "a1", "a1", bump_major=True) raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mc_dir) raw_input("If the diff looks good hit return to commit those changes") commit( mc_dir, user=hg_user, msg= "Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") raw_input("Go ahead and push mozilla-central...and continue to " "mozilla-aurora to mozilla-beta uplift ") # mozilla-aurora ma_revision = get_revision(ma_dir) ma_tag = "FIREFOX_BETA_%s_BASE" % curr_ma_version ma_end_tag = "FIREFOX_AURORA_%s_END" % curr_ma_version # pull must use revision not tag pull(mc_dir, dest=ma_dir, revision=new_mc_revision) merge_via_debugsetparents( ma_dir, old_head=ma_revision, new_head=new_mc_revision, user=hg_user, msg="Merge old head via |hg debugsetparents %s %s|. " "CLOSED TREE DONTBUILD a=release" % (new_mc_revision, ma_revision)) tag(ma_dir, tags=[ma_tag, ma_end_tag], rev=ma_revision, user=hg_user, msg= "Added %s %s tags for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (ma_tag, ma_end_tag, ma_revision)) log.info("Reverting locales") for f in locale_files: run_cmd(["hg", "revert", "-r", ma_end_tag, f], cwd=ma_dir) bump_version(ma_dir, next_ma_version, next_ma_version, "a1", "a2") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=ma_dir) raw_input("If the diff looks good hit return to commit those changes") commit( ma_dir, user=hg_user, msg= "Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") replace(path.join(ma_dir, "browser/confvars.sh"), "MOZ_BRANDING_DIRECTORY=browser/branding/nightly", "MOZ_BRANDING_DIRECTORY=browser/branding/aurora") replace(path.join(ma_dir, "browser/confvars.sh"), "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-central", "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-aurora") replace(path.join(ma_dir, "browser/confvars.sh"), "MAR_CHANNEL_ID=firefox-mozilla-central", "MAR_CHANNEL_ID=firefox-mozilla-aurora") for d in branding_dirs: for f in branding_files: replace( path.join(ma_dir, d, f), "ac_add_options --with-branding=mobile/android/branding/nightly", "ac_add_options --with-branding=mobile/android/branding/aurora" ) if f == "l10n-nightly": replace(path.join(ma_dir, d, f), "ac_add_options --with-l10n-base=../../l10n-central", "ac_add_options --with-l10n-base=..") for f in profiling_files: replace(path.join(ma_dir, f), "ac_add_options --enable-profiling", "") for f in elf_hack_files: replace( path.join(ma_dir, f), "ac_add_options --disable-elf-hack # --enable-elf-hack conflicts with --enable-profiling", "") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=ma_dir) raw_input("If the diff looks good hit return to commit those changes") commit( ma_dir, user=hg_user, msg= "Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release" ) raw_input("Go ahead and push mozilla-aurora changes.") # mozilla-beta mb_revision = get_revision(mb_dir) mb_tag = "FIREFOX_BETA_%s_END" % curr_mb_version # pull must use revision not tag pull(ma_dir, dest=mb_dir, revision=ma_revision) merge_via_debugsetparents( mb_dir, old_head=mb_revision, new_head=ma_revision, user=hg_user, msg="Merge old head via |hg debugsetparents %s %s|. " "CLOSED TREE DONTBUILD a=release" % (ma_revision, mb_revision)) tag(mb_dir, tags=[mb_tag], rev=mb_revision, user=hg_user, msg= "Added %s tag for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (mb_tag, mb_revision)) bump_version(mb_dir, next_mb_version, next_mb_version, "a2", "") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mb_dir) raw_input("If the diff looks good hit return to commit those changes") commit( mb_dir, user=hg_user, msg= "Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") replace(path.join(mb_dir, "browser/confvars.sh"), "MOZ_BRANDING_DIRECTORY=browser/branding/aurora", "MOZ_BRANDING_DIRECTORY=browser/branding/nightly") replace( path.join(mb_dir, "browser/confvars.sh"), "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-aurora", "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-beta,firefox-mozilla-release" ) replace(path.join(mb_dir, "browser/confvars.sh"), "MAR_CHANNEL_ID=firefox-mozilla-aurora", "MAR_CHANNEL_ID=firefox-mozilla-beta") for d in branding_dirs: for f in branding_files: replace( path.join(mb_dir, d, f), "ac_add_options --with-branding=mobile/android/branding/aurora", "ac_add_options --with-branding=mobile/android/branding/beta") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mb_dir) raw_input("If the diff looks good hit return to commit those changes") commit( mb_dir, user=hg_user, msg= "Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release" ) raw_input("Go ahead and push mozilla-beta changes.")
def testTagWithUser(self): rev = tag(self.repodir, ['taggy'], user='******') info = getRevInfo(self.repodir, rev) self.assertEquals('tagger', info['user'])
def testTagWithUser(self): rev = tag(self.repodir, ["taggy"], user="******") info = getRevInfo(self.repodir, rev) self.assertEquals("tagger", info["user"])
def main(): logging.basicConfig(format="%(asctime)s - %(message)s", level=logging.INFO) parser = argparse.ArgumentParser() parser.add_argument("--hg-user", default="ffxbld <*****@*****.**>", help="Mercurial username to be passed to hg -u") args = parser.parse_args() hg_user = args.hg_user # prep the repos for d, repo in ((mc_dir, mc_repo), (ma_dir, ma_repo), (mb_dir, mb_repo)): mercurial(repo, d) log.info("Cleaning up %s...", d) strip_outgoing(d) update(d, branch="default") curr_mc_version = get_major_version(mc_dir) curr_ma_version = get_major_version(ma_dir) curr_mb_version = get_major_version(mb_dir) next_mc_version = str(int(curr_mc_version) + 1) next_ma_version = str(int(curr_ma_version) + 1) next_mb_version = str(int(curr_mb_version) + 1) # mozilla-central mc_revision = get_revision(mc_dir) mc_tag = "FIREFOX_AURORA_%s_BASE" % curr_mc_version tag(mc_dir, tags=[mc_tag], rev=mc_revision, user=hg_user, msg="Added %s tag for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (mc_tag, mc_revision)) new_mc_revision = get_revision(mc_dir) bump_version(mc_dir, curr_mc_version, next_mc_version, "a1", "a1", bump_major=True) raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mc_dir) raw_input("If the diff looks good hit return to commit those changes") commit(mc_dir, user=hg_user, msg="Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") raw_input("Go ahead and push mozilla-central...and continue to " "mozilla-aurora to mozilla-beta uplift ") # mozilla-aurora ma_revision = get_revision(ma_dir) ma_tag = "FIREFOX_BETA_%s_BASE" % curr_ma_version ma_end_tag = "FIREFOX_AURORA_%s_END" % curr_ma_version # pull must use revision not tag pull(mc_dir, dest=ma_dir, revision=new_mc_revision) merge_via_debugsetparents( ma_dir, old_head=ma_revision, new_head=new_mc_revision, user=hg_user, msg="Merge old head via |hg debugsetparents %s %s|. " "CLOSED TREE DONTBUILD a=release" % (new_mc_revision, ma_revision)) tag(ma_dir, tags=[ma_tag, ma_end_tag], rev=ma_revision, user=hg_user, msg="Added %s %s tags for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (ma_tag, ma_end_tag, ma_revision)) log.info("Reverting locales") for f in locale_files: run_cmd(["hg", "revert", "-r", ma_end_tag, f], cwd=ma_dir) bump_version(ma_dir, next_ma_version, next_ma_version, "a1", "a2") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=ma_dir) raw_input("If the diff looks good hit return to commit those changes") commit(ma_dir, user=hg_user, msg="Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") replace(path.join(ma_dir, "browser/confvars.sh"), "MOZ_BRANDING_DIRECTORY=browser/branding/nightly", "MOZ_BRANDING_DIRECTORY=browser/branding/aurora") replace(path.join(ma_dir, "browser/confvars.sh"), "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-central", "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-aurora") replace(path.join(ma_dir, "browser/confvars.sh"), "MAR_CHANNEL_ID=firefox-mozilla-central", "MAR_CHANNEL_ID=firefox-mozilla-aurora") for d in branding_dirs: for f in branding_files: replace(path.join(ma_dir, d, f), "ac_add_options --with-branding=mobile/android/branding/nightly", "ac_add_options --with-branding=mobile/android/branding/aurora") if f == "l10n-nightly": replace(path.join(ma_dir, d, f), "ac_add_options --with-l10n-base=../../l10n-central", "ac_add_options --with-l10n-base=..") for f in profiling_files: replace(path.join(ma_dir, f), "ac_add_options --enable-profiling", "") for f in elf_hack_files: replace(path.join(ma_dir, f), "ac_add_options --disable-elf-hack # --enable-elf-hack conflicts with --enable-profiling", "") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=ma_dir) raw_input("If the diff looks good hit return to commit those changes") commit(ma_dir, user=hg_user, msg="Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release") raw_input("Go ahead and push mozilla-aurora changes.") # mozilla-beta mb_revision = get_revision(mb_dir) mb_tag = "FIREFOX_BETA_%s_END" % curr_mb_version # pull must use revision not tag pull(ma_dir, dest=mb_dir, revision=ma_revision) merge_via_debugsetparents( mb_dir, old_head=mb_revision, new_head=ma_revision, user=hg_user, msg="Merge old head via |hg debugsetparents %s %s|. " "CLOSED TREE DONTBUILD a=release" % (ma_revision, mb_revision)) tag(mb_dir, tags=[mb_tag], rev=mb_revision, user=hg_user, msg="Added %s tag for changeset %s. IGNORE BROKEN CHANGESETS DONTBUILD CLOSED TREE NO BUG a=release" % (mb_tag, mb_revision)) bump_version(mb_dir, next_mb_version, next_mb_version, "a2", "") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mb_dir) raw_input("If the diff looks good hit return to commit those changes") commit(mb_dir, user=hg_user, msg="Version bump. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release") replace(path.join(mb_dir, "browser/confvars.sh"), "MOZ_BRANDING_DIRECTORY=browser/branding/aurora", "MOZ_BRANDING_DIRECTORY=browser/branding/nightly") replace(path.join(mb_dir, "browser/confvars.sh"), "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-aurora", "ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-beta,firefox-mozilla-release") replace(path.join(mb_dir, "browser/confvars.sh"), "MAR_CHANNEL_ID=firefox-mozilla-aurora", "MAR_CHANNEL_ID=firefox-mozilla-beta") for d in branding_dirs: for f in branding_files: replace(path.join(mb_dir, d, f), "ac_add_options --with-branding=mobile/android/branding/aurora", "ac_add_options --with-branding=mobile/android/branding/beta") raw_input("Hit 'return' to display diffs onscreen") run_cmd(["hg", "diff"], cwd=mb_dir) raw_input("If the diff looks good hit return to commit those changes") commit(mb_dir, user=hg_user, msg="Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release") raw_input("Go ahead and push mozilla-beta changes.")
def testMultitagWithRevision(self): tag(self.repodir, ["tag1", "tag2"], rev="1") info = getRevInfo(self.repodir, "1") self.assertEquals(["tag1", "tag2"], info["tags"])
def testMultitagSet(self): tag(self.repodir, set(['tag1', 'tag5'])) tags = getTags(self.repodir) self.assertTrue('tag1' in tags) self.assertTrue('tag5' in tags)
def testForcedTag(self): run_cmd(["hg", "tag", "-R", self.repodir, "tag"]) tag(self.repodir, ["tag"], force=True) self.assertTrue("tag" in getTags(self.repodir))
def testMultitag(self): tag(self.repodir, ['tag1', 'tag2']) tags = getTags(self.repodir) self.assertTrue('tag1' in tags) self.assertTrue('tag2' in tags)