def upload(args): """Upload/deliver local modifications to remote repositories.""" point = "" if len(args) == 0: pass elif len(args) > 1: sys.stderr.write("Failed: wrong format of command line paramaters.") upload_usage() sys.exit(2) elif args[0] in ('-h', "--help"): upload_usage() sys.exit() elif args[0][0] == '-': sys.stderr.write("Failed: wrong format of command line paramaters.") upload_usage() sys.exit(2) else: point = args[0] root = common.get_root() git.get_cmg_cfg(root) print("---- " + root) if common.cfgs['online']: git.fetch(root) else: sys.stderr.write("Failed: CMG is running under offline mode. No way to upload.") upload_usage() sys.exit(2) local = remote = tag = "" if point == "": (local, remote) = git.get_current_br_pair(root) if local == "": sys.stderr.write("Failed: it's not on a local branch "\ + "that follow a remote-tracking branch") sys.exit(2) else: if git.is_local_br(root, point): local = point remote = git.get_remote_br_via_local(root, local) if remote == "": sys.stderr.write("Failed: can not find local branch "\ + local + "'s remote-tracking branch\n") sys.exit(2) elif git.is_local_br_to_create(root, point): local = git.create_default_local_br(root, point) remote = "origin/" + local elif git.is_remote_br(root, point): remote = point local = git.get_local_br_via_remote(root, remote) if local == "": local = git.create_default_local_br(root, point) elif git.is_tag(root, point): tag = point else: sys.stderr.write("Failed: '" + point + "' is not a local branch, or "\ + "remote-tracking branch, or tag.") sys.exit(2) if local != "" and point != "": #to check if current branch is the given branch (local_now, remote_now) = git.get_current_br_pair(root) if local_now == "": sys.strerr.write("Failed: it's expected to be on local branch '"\ + local + "' to follow remote-tracking branch '" + remote +"', "\ + "but currently it's not on a local branch " +\ "that follow a remote-tracking branch.") sys.exit(2) elif local_now != local: sys.strerr.write("Failed: it's expected to be on local branch '"\ + local + "' to follow remote-tracking branch '" + remote +"', "\ + "but currently it's on local branch '" + local_now +\ "' that follow remote-tracking branch '" + remote_now + "'.") sys.exit(2) git.cleanup_working_tree(root) config = None if tag == "": config = common.get_stream_cfg(root, local, remote) else: tag_annotation = git.get_tag_annotation(root, tag) config = common.get_baseline_cfg(root, tag, tag_annotation) for component in config.sections(): if not config.has_option(component, 'type'): sys.stderr.write("Failed: bad format of stream/baseline config: ") sys.stderr.write("No 'type' option in '" + component + "' section.") sys.exit(2) type = config.get(component, 'type') if type.lower() == 'git': git.upload(root, config, component) elif type.lower() == 'svn' or type.lower() == 'subversion': svn.upload(root, config, component) elif type.lower() == 'fl' or type.lower() == 'file': file.upload(root, config, component) elif type.lower() == 'dir' or type.lower() == 'directory': file.upload(root, config, component) else: sys.stderr.write("Failed: bad format of stream/baseline config: ") sys.stderr.write("type '" + type + "' is not supported.") sys.exit(2) print("---- (back to) " + root) if tag == "": if common.cfgs['gitrebase']: git.rebase(root, remote) else: git.merge(root, remote) git.push(root, remote) else: git.push_tag(root, tag)
def download(args): """Download/sync/update from remote repositories/places to local repositories / working trees.""" point = "" if len(args) == 0: pass elif len(args) > 1: sys.stderr.write("Failed: wrong format of command line paramaters.") download_usage() sys.exit(2) elif args[0] in ('-h', "--help"): download_usage() sys.exit() elif args[0][0] == '-': sys.stderr.write("Failed: wrong format of command line paramaters.") download_usage() sys.exit(2) else: point = args[0] root = common.get_root() git.get_cmg_cfg(root) print("---- " + root) if common.cfgs['online']: git.fetch(root) else: print("Warning: CMG is running under offline mode. No interaction with remote.") local = remote = tag = "" if point == "": (local, remote) = git.get_current_br_pair(root) if local == "": sys.stderr.write("Failed: it's not on a local branch "\ + "that follow a remote-tracking branch") sys.exit(2) else: if git.is_local_br(root, point): local = point remote = git.get_remote_br_via_local(root, local) if remote == "": sys.stderr.write("Failed: can not find local branch "\ + local + "'s remote-tracking branch\n") sys.exit(2) elif git.is_local_br_to_create(root, point): local = git.create_default_local_br(root, point) remote = "origin/" + local elif git.is_remote_br(root, point): remote = point local = git.get_local_br_via_remote(root, remote) if local == "": local = git.create_default_local_br(root, point) elif git.is_tag(root, point): tag = point else: sys.stderr.write("Failed: '" + point + "' is not a local branch, or "\ + "remote-tracking branch, or tag.") sys.exit(2) if tag == "": git.cleanup_working_tree(root) git.checkout(root, local, "branch") if common.cfgs['gitrebase']: git.rebase(root, remote) else: git.merge(root, remote) else: git.cleanup_working_tree(root) git.checkout(root, tag, "tag") config = None if tag == "": config = common.get_stream_cfg(root, local, remote) else: tag_annotation = git.get_tag_annotation(root, tag) config = common.get_baseline_cfg(root, tag, tag_annotation) for component in config.sections(): if not config.has_option(component, 'type'): sys.stderr.write("Failed: bad format of stream/baseline config: ") sys.stderr.write("No 'type' option in '" + component + "' section.") sys.exit(2) type = config.get(component, 'type') if type.lower() == 'git': git.download(root, config, component) elif type.lower() == 'svn' or type.lower() == 'subversion': svn.download(root, config, component) elif type.lower() == 'fl' or type.lower() == 'file': file.download(root, config, component, True) elif type.lower() == 'dir' or type.lower() == 'directory': file.download(root, config, component, False) else: sys.stderr.write("Failed: bad format of stream/baseline config: ") sys.stderr.write("type '" + type + "' is not supported.") sys.exit(2)