Esempio n. 1
0
def clone_repo(src, dest):
    """
    Clone a repository.
    
    Arguments:
    src  -- URL of to the repository to clone from.
    dest -- URL of the target directory of the clone.
    
    Returns:
    A clone of the supplied repository.
    """
    src_connector = Connector.from_string(src)
    with src_connector.connected():
        origin = repo.Repo.load_from_disk(src_connector)
        dest = os.path.join(dest, origin.name)  # make clone at "<dest>/<name>"
        dest_connector = Connector.from_string(dest)
        with dest_connector.connected():
            clone = repo.Repo.clone(origin, dest_connector)
    init_repo_logging(clone)
    log.info("Cloned repository from %s to %s" % (src, dest))
    return clone
Esempio n. 2
0
def load_repo(url):
    """
    Load an existing repository from disk and return it.
    
    Arguments:
    url -- URL of the repository on disk.
    
    Returns:
    The loaded repository.
    """
    connector = Connector.from_string(url)
    with connector.connected():
        rep = repo.Repo.load_from_disk(connector)
    init_repo_logging(rep)
    log.info("Loaded PictureClerk repository from disk")
    return rep
Esempio n. 3
0
def init_repo(url):
    """
    Initialize a new repository and return it.
    
    Arguments:
    url -- URL of the repository to be initialized (e.g. '/home/user/repo').
    
    Returns:
    The initialized repository.
    """
    config = repo.new_repo_config()
    connector = Connector.from_string(url)
    with connector.connected():
        rep = repo.Repo.create_on_disk(connector, config)
    init_repo_logging(rep)
    log.info("Initialized empty PictureClerk repository")
    return rep
Esempio n. 4
0
def backup_repo(rep, *urls):
    """
    Backup a repository to multiple locations.
    
    Arguments:
    rep  -- Repository to be backed up
    urls -- Backup repository to these locations (1 or more URL args).
    
    Returns:
    Backup repositories (clones of the supplied respositories).
    """
    backups = list()
    for url in urls:
        url = os.path.join(url, rep.name)
        connector = Connector.from_string(url)
        with rep.connector.connected(), connector.connected():
            backup = repo.Repo.clone(rep, connector)
        init_repo_logging(backup)
        backups.append(backup)
        log.info("Backed up repository to %s" % url)
    return backups
Esempio n. 5
0
def merge_repos(rep, *others):
    """
    Merge multiple repositories into one.
    
    Arguments:
    rep    -- Merge 'others' repositories into this repository.
    others -- Path to repositories to merge into 'rep' (1 or more path args).
    """
    with rep.connector.connected():
        for url in others:
            log.info("Merging repository '%s'", url)
            connector = Connector.from_string(url)
            with connector.connected():
                other = repo.Repo.load_from_disk(connector)
                # copy picture files
                for picture in other.index.iterpics():
                    for fname in picture.get_filenames():
                        connector.copy(fname, rep.connector, dest_path=fname)
            # add pictures to index
            rep.index.add(other.index.iterpics())
    log.info("Saving index to file.")
    with rep.connector.connected():
        rep.save_index_to_disk()
    return rep