def checkout(self, id): """Create a local copy of a suite with the given ID. Return the SuiteId of the suite on success. """ if isinstance(id, str): id = SuiteId(id_text=id) if id.revision is None: id.revision = id.REV_HEAD if id.branch is None: id.branch = id.BRANCH_TRUNK local_copy = id.to_local_copy() if os.path.exists(local_copy): id0 = SuiteId(location=local_copy) if id.to_string_with_version() == id0.to_string_with_version(): self.event_handler(LocalCopyCreateSkipEvent(id)) return id elif self.force_mode: if os.path.isfile(local_copy): unlink(local_copy) else: shutil.rmtree(local_copy) self.event_handler(FileDeleteEvent(local_copy)) else: raise FileExistError(local_copy) local_copy_dir = os.path.dirname(local_copy) if not os.path.isdir(local_copy_dir): os.makedirs(os.path.dirname(local_copy)) self.event_handler(FileCreateEvent(local_copy_dir)) origin = id.to_origin() + "/" + id.branch + "@" + id.revision self.popen("svn", "checkout", "-q", origin, local_copy) self.event_handler(LocalCopyCreateEvent(id)) return id
def checkout(self, id_): """Create a local copy of a suite with the given ID. Return the SuiteId of the suite on success. """ if isinstance(id_, str): id_ = SuiteId(id_text=id_) if id_.revision is None: id_.revision = id_.REV_HEAD if id_.branch is None: id_.branch = id_.BRANCH_TRUNK local_copy = id_.to_local_copy() if os.path.exists(local_copy): id0 = SuiteId(location=local_copy) if id_.to_string_with_version() == id0.to_string_with_version(): self.event_handler(LocalCopyCreateSkipEvent(id_)) return id_ elif self.force_mode: self.fs_util.delete(local_copy) else: raise FileExistError(local_copy) local_copy_dir = os.path.dirname(local_copy) if not os.path.isdir(local_copy_dir): self.fs_util.makedirs(os.path.dirname(local_copy)) origin = "%s/%s@%s" % (id_.to_origin(), id_.branch, id_.revision) self.popen("svn", "checkout", "-q", origin, local_copy) self.event_handler(LocalCopyCreateEvent(id_)) return id_
def create(argv): """CLI function: create and copy.""" opt_parser = RoseOptionParser() opt_parser.add_my_options("checkout_mode", "info_file", "meta_suite_mode", "non_interactive", "prefix") opts, args = opt_parser.parse_args(argv) verbosity = opts.verbosity - opts.quietness report = Reporter(verbosity) client = RosieVCClient(event_handler=report) SuiteId.svn.event_handler = client.event_handler # FIXME: ugly? from_id = None if args: from_id = SuiteId(id_text=args[0]) if from_id.branch is None: from_id.branch = from_id.BRANCH_TRUNK if from_id.revision is None: from_id.revision = from_id.REV_HEAD from_id = SuiteId(id_text=from_id.to_string_with_version()) if opts.info_file is None: try: info_config = client.generate_info_config(from_id, opts.prefix) except (RosePopenError) as e: report(e) sys.exit(1) info_file = tempfile.NamedTemporaryFile(delete=False) try: rose.config.dump(info_config, info_file) info_file.close() command_list = client.popen.get_cmd("editor", info_file.name) client.popen(*command_list, stdout=sys.stdout) info_config = rose.config.load(info_file.name) finally: os.unlink(info_file.name) elif opts.info_file == "-": info_config = rose.config.load(sys.stdin) else: info_config = rose.config.load(opts.info_file) if not opts.non_interactive: try: response = raw_input("Create? y/n (default n) ") except EOFError: sys.exit(1) if response != 'y': sys.exit(1) try: id = client.create(info_config, from_id, opts.prefix, opts.meta_suite_mode) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) if opts.checkout_mode: try: client.checkout(id) except (FileExistError, RosePopenError) as e: report(e) sys.exit(1)
def create(argv): """CLI function: create and copy.""" opt_parser = RoseOptionParser() opt_parser.add_my_options( "checkout_mode", "info_file", "meta_suite_mode", "non_interactive", "prefix", "project") opts, args = opt_parser.parse_args(argv) verbosity = opts.verbosity - opts.quietness client = RosieVCClient(event_handler=Reporter(verbosity)) SuiteId.svn.event_handler = client.event_handler from_id = None if args: from_id = SuiteId(id_text=args[0]) if from_id.branch is None: from_id.branch = from_id.BRANCH_TRUNK if from_id.revision is None: from_id.revision = from_id.REV_HEAD from_id = SuiteId(id_text=from_id.to_string_with_version()) interactive_mode = not opts.non_interactive if opts.info_file is None: info_config = client.generate_info_config( from_id, opts.prefix, opts.project) if from_id is not None: meta_config = load_meta_config( info_config, directory=None, config_type=rose.INFO_CONFIG_NAME, error_handler=None, ignore_meta_error=False) for node_keys, node in meta_config.walk(no_ignore=True): if isinstance(node.value, dict): continue sect, key = node_keys value = node.value sect = sect.replace("=", "") if key == "copy-mode" and value == "clear": info_config.set([sect], "") if key == "copy-mode" and value == "never": info_config.unset([sect]) info_config = _edit_info_config(opts, client, info_config) else: file_ = opts.info_file if opts.info_file == "-": file_ = sys.stdin info_config = rose.config.load(file_) info_config = _validate_info_config(opts, client, info_config) if interactive_mode: prefix = opts.prefix if from_id: if not prefix: prefix = from_id.prefix question = PROMPT_COPY % (from_id.to_string_with_version(), prefix) else: if not prefix: prefix = SuiteId.get_prefix_default() question = PROMPT_CREATE % prefix try: response = input(question) except EOFError: sys.exit(1) if response != YES: sys.exit(1) try: id_ = client.create( info_config, from_id, opts.prefix, opts.meta_suite_mode) except (RosePopenError, SuiteIdOverflowError) as exc: client.event_handler(exc) sys.exit(1) if opts.checkout_mode: try: client.checkout(id_) except (FileExistError, RosePopenError) as exc: client.event_handler(exc) sys.exit(1)
def create(argv): """CLI function: create and copy.""" opt_parser = RoseOptionParser() opt_parser.add_my_options("checkout_mode", "info_file", "meta_suite_mode", "non_interactive", "prefix", "project") opts, args = opt_parser.parse_args(argv) verbosity = opts.verbosity - opts.quietness client = RosieVCClient(event_handler=Reporter(verbosity)) SuiteId.svn.event_handler = client.event_handler from_id = None if args: from_id = SuiteId(id_text=args[0]) if from_id.branch is None: from_id.branch = from_id.BRANCH_TRUNK if from_id.revision is None: from_id.revision = from_id.REV_HEAD from_id = SuiteId(id_text=from_id.to_string_with_version()) interactive_mode = not opts.non_interactive if opts.info_file is None: info_config = client.generate_info_config(from_id, opts.prefix, opts.project) if from_id is not None: meta_config = load_meta_config(info_config, directory=None, config_type=rose.INFO_CONFIG_NAME, error_handler=None, ignore_meta_error=False) for node_keys, node in meta_config.walk(no_ignore=True): if isinstance(node.value, dict): continue sect, key = node_keys value = node.value sect = sect.translate(None, "=") if key == "copy-mode" and value == "clear": info_config.set([sect], "") if key == "copy-mode" and value == "never": info_config.unset([sect]) info_config = _edit_info_config(opts, client, info_config) else: file_ = opts.info_file if opts.info_file == "-": file_ = sys.stdin info_config = rose.config.load(file_) info_config = _validate_info_config(opts, client, info_config) if interactive_mode: prefix = opts.prefix if from_id: if not prefix: prefix = from_id.prefix question = PROMPT_COPY % (from_id.to_string_with_version(), prefix) else: if not prefix: prefix = SuiteId.get_prefix_default() question = PROMPT_CREATE % prefix try: response = raw_input(question) except EOFError: sys.exit(1) if response != YES: sys.exit(1) try: id_ = client.create(info_config, from_id, opts.prefix, opts.meta_suite_mode) except (RosePopenError, SuiteIdOverflowError) as exc: client.event_handler(exc) sys.exit(1) if opts.checkout_mode: try: client.checkout(id_) except (FileExistError, RosePopenError) as exc: client.event_handler(exc) sys.exit(1)
def create(argv): """CLI function: create and copy.""" opt_parser = RoseOptionParser() opt_parser.add_my_options("checkout_mode", "info_file", "meta_suite_mode", "non_interactive", "prefix", "project") opts, args = opt_parser.parse_args(argv) verbosity = opts.verbosity - opts.quietness report = Reporter(verbosity) client = RosieVCClient(event_handler=report) SuiteId.svn.event_handler = client.event_handler # FIXME: ugly? from_id = None if args: from_id = SuiteId(id_text=args[0]) if from_id.branch is None: from_id.branch = from_id.BRANCH_TRUNK if from_id.revision is None: from_id.revision = from_id.REV_HEAD from_id = SuiteId(id_text=from_id.to_string_with_version()) info_config_new = None interactive_mode = not opts.non_interactive if opts.info_file is None: try: info_config = client.generate_info_config(from_id, opts.prefix, opts.project) except (RosePopenError) as e: report(e) sys.exit(1) info_file = tempfile.NamedTemporaryFile() if args: meta_config = load_meta_config(info_config, directory=None, config_type=rose.INFO_CONFIG_NAME, error_handler=None, ignore_meta_error=False) for node_keys, node in meta_config.walk(no_ignore=True): if isinstance(node.value, dict): continue sect, key = node_keys value = node.value sect = sect.translate(None, "=") if key == "copy-mode" and value == "clear": info_config.set([sect], "") if key == "copy-mode" and value == "never": info_config.unset([sect]) rose.config.dump(info_config, info_file) info_file.write(CREATE_INFO_CONFIG_COMMENT) info_file.seek(0) command_list = client.popen.get_cmd("editor", info_file.name) client.popen(*command_list, stdout=sys.stdout) info_config = rose.config.load(info_file) try: info_config_new, error_reported = client.check_fields(info_config, interactive_mode, from_id, opts.prefix) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) while error_reported is True: info_file = tempfile.NamedTemporaryFile() info_config = info_config_new if (info_config.get(["project"]).value is not None and opts.project is None): project = info_config.get(["project"]).value info_config = client.generate_info_config(from_id, opts.prefix, project, info_config) rose.config.dump(info_config, info_file) info_file.write(CREATE_INFO_CONFIG_COMMENT) info_file.seek(0) command_list = client.popen.get_cmd("editor", info_file.name) client.popen(*command_list, stdout=sys.stdout) info_config = rose.config.load(info_file) try: info_config_new, error_reported = client.check_fields( info_config, interactive_mode, from_id, opts.prefix) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) elif opts.info_file == "-": info_config = rose.config.load(sys.stdin) try: info_config_new, error_reported = client.check_fields(info_config, interactive_mode, from_id, opts.info_file, opts.prefix) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) else: info_config = rose.config.load(opts.info_file) try: info_config_new, error_reported = client.check_fields(info_config, interactive_mode, from_id, opts.info_file, opts.prefix) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) if interactive_mode: if from_id: question = "Copy \"%s\"?" % from_id.to_string_with_version() else: prefix = opts.prefix if not prefix: prefix = SuiteId.get_prefix_default() question = "Create suite at \"%s\"?" % prefix try: response = raw_input(question + " y/n (default n) ") except EOFError: sys.exit(1) if response != 'y': sys.exit(1) try: id = client.create(info_config, from_id, opts.prefix, opts.meta_suite_mode) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) if opts.checkout_mode: try: client.checkout(id) except (FileExistError, RosePopenError) as e: report(e) sys.exit(1)
def create(argv): """CLI function: create and copy.""" opt_parser = RoseOptionParser() opt_parser.add_my_options("checkout_mode", "info_file", "meta_suite_mode", "non_interactive", "prefix") opts, args = opt_parser.parse_args(argv) verbosity = opts.verbosity - opts.quietness report = Reporter(verbosity) client = RosieVCClient(event_handler=report) SuiteId.svn.event_handler = client.event_handler # FIXME: ugly? from_id = None if args: from_id = SuiteId(id_text=args[0]) if from_id.branch is None: from_id.branch = from_id.BRANCH_TRUNK if from_id.revision is None: from_id.revision = from_id.REV_HEAD from_id = SuiteId(id_text=from_id.to_string_with_version()) if opts.info_file is None: try: info_config = client.generate_info_config(from_id, opts.prefix) except (RosePopenError) as e: report(e) sys.exit(1) info_file = tempfile.NamedTemporaryFile(delete=False) try: rose.config.dump(info_config, info_file) info_file.write(CREATE_INFO_CONFIG_COMMENT) info_file.close() command_list = client.popen.get_cmd("editor", info_file.name) client.popen(*command_list, stdout=sys.stdout) info_config = rose.config.load(info_file.name) finally: os.unlink(info_file.name) elif opts.info_file == "-": info_config = rose.config.load(sys.stdin) else: info_config = rose.config.load(opts.info_file) if not opts.non_interactive: if from_id: question = "Copy \"%s\"?" % from_id.to_string_with_version() else: prefix = opts.prefix if not prefix: prefix = SuiteId.get_prefix_default() question = "Create suite at \"%s\"?" % prefix try: response = raw_input(question + " y/n (default n) ") except EOFError: sys.exit(1) if response != 'y': sys.exit(1) try: id = client.create(info_config, from_id, opts.prefix, opts.meta_suite_mode) except (RosePopenError, SuiteInfoFieldError, SuiteIdOverflowError) as e: report(e) sys.exit(1) if opts.checkout_mode: try: client.checkout(id) except (FileExistError, RosePopenError) as e: report(e) sys.exit(1)