def push(verbose, *repos): """Pushes all currently installed repositories. """ # Check if we need to update the local repository def needs_updating(rep): state = get_remote_status(rep) return state == "push" or state == "failed" or state == "divergence" ret = True repos = list(filter(lambda x:x, [r.strip() for r in repos])) for rep in repos: std("git push", rep, "", newline = False) if verbose or needs_updating(rep): std() ret = git_push(rep) and ret else: std("OK, nothing to push. ") return ret
def create(reponame, type="none", remote = True): """Creates a new repository in the given directory""" # Resolve the repository to create repo = match_repo(reponame, existence=False) if repo == None: err("Can not resolve repository to create. ") return False # Remote creation currently disabled if remote: err("Remote cration currently disabled. ") remote = False # and the full path absrepo = match_repo(reponame, abs=True, existence=False) repo_group = repo.split("/")[0] repo_name = repo.split("/")[1] # Check if it is already installed. # TODO: Use the other is_installed if is_installed(repo): err("Repository", repo, "already installed. ") err("Do you maybe want to push this to the remote?") return False # Make the directory if it does not yet exist. try: mkdir_p(absrepo) except: err("Can not create repository directory") return False if not get_config("init::allow_nonempty"): if not (not os.listdir(absrepo)): err("Target Directory is non-empty. ") err("If you want to enable lmh init on non-empty directories, please run") err(" lmh config init::allow_nonempty true") return False # Template Variables. tpl_vars = { "repo": repo, "repo_group": repo_group, "repo_name": repo_name, "install_dir": lmh_locate() } # Copy the base template if not copy_template_dir(os.path.join(emptyrepo_dir, "none"), absrepo, tpl_vars): err("Unable to create repository base. ") return False # Copy the specific type. if type != "none": type_dir = os.path.join(emptyrepo_dir, type) if os.path.isdir(type_dir): if not copy_template_dir(type_dir, absrepo, tpl_vars): err("Unable to use repository template. ") return False else: err("Unknown repository type: ", type) return False if git_root(absrepo) != absrepo: # Now lets make an init if not git_do(absrepo, "init"): err("Error creating git repository. ") err("The directory has been created successfully, however git init failed. ") err("Please run it manually. ") return False # Create the initial commit. if not (git_do(absrepo, "add", "-A") and git_commit(absrepo, "-m", "Repository created by lmh")): err("Error creating inital commit. ") err("The directory has been created successfully, however git commit failed. ") err("Please run it manually. ") return False # Can we find a remote for this? source = find_source(repo, quiet=True) # Don't do anything remote => we are done. if not remote: if source: if not git_do(absrepo, "remote", "add", "origin", source): err("Can not add origin. ") err("git is suddenly weird. ") return False else: std("Skipping remote creation because --no-remote is given. ") std("Repository created successfully. ") return True # Source does not exist => we will have to create it. if not source: source = create_remote(repo_group, repo_name) if not source: err("local repository created but remote creation failed. ") return False # Add the origin. if not git_do(absrepo, "remote", "add", "origin", source): err("Can not add origin. ") err("git is suddenly weird. ") return False if not git_push(absrepo, "-u", "origin", "master"): err("Repository created but could not push created repository. ") err("Check your network connection and try again using git push. ") return False std("Created new repository successfully. ") return True