Source code for fabtools.git
"""
Git
===
This module provides low-level tools for managing `Git`_ repositories. You
should normally not use them directly but rather use the high-level wrapper
:func:`fabtools.require.git.working_copy` instead.
.. _Git: http://git-scm.com/
"""
from __future__ import with_statement
from fabric.api import run
from fabric.api import sudo
from fabric.context_managers import cd
from fabtools.utils import run_as_root
[docs]def clone(remote_url, path=None, use_sudo=False, user=None):
""" Clone a remote Git repository into a non existing directory.
:param remote_url: URL of the remote repository to clone.
:type remote_url: str
:param path: Path of the working copy directory. Must not exist yet.
:type path: str
:param use_sudo: If ``True`` execute ``git`` with
:func:`fabric.operations.sudo`, else with
:func:`fabric.operations.run`.
:type use_sudo: bool
:param user: If ``use_sudo is True``, run :func:`fabric.operations.sudo`
with the given user. If ``use_sudo is False`` this parameter
has no effect.
:type user: str
"""
cmd = 'git clone %s' % remote_url
if path is not None:
cmd = cmd + ' %s' % path
if use_sudo and user is None:
run_as_root(cmd)
elif use_sudo:
sudo(cmd, user=user)
else:
run(cmd)
[docs]def pull(path, use_sudo=False, user=None):
""" Pull from a remote Git repository on an existing working copy.
:param path: Path of the working copy directory. This directory must exist
and be a Git working copy with a default remote to pull from.
:type path: str
:param use_sudo: If ``True`` execute ``git`` with
:func:`fabric.operations.sudo`, else with
:func:`fabric.operations.run`.
:type use_sudo: bool
:param user: If ``use_sudo is True``, run :func:`fabric.operations.sudo`
with the given user. If ``use_sudo is False`` this parameter
has no effect.
:type user: str
"""
if path is None:
raise ValueError("Path to the working copy is needed to pull from a "
"remote repository.")
cmd = 'git pull'
with cd(path):
if use_sudo and user is None:
run_as_root(cmd)
elif use_sudo:
sudo(cmd, user=user)
else:
run(cmd)
[docs]def checkout(path, branch="master", use_sudo=False, user=None):
""" Checkout an existing branch of an existing Git working copy.
:param path: Path of the working copy directory. This directory must exist
and be a Git working copy.
:type path: str
:param branch: Name of the branch to checkout.
:type branch: str
:param use_sudo: If ``True`` execute ``git`` with
:func:`fabric.operations.sudo`, else with
:func:`fabric.operations.run`.
:type use_sudo: bool
:param user: If ``use_sudo is True``, run :func:`fabric.operations.sudo`
with the given user. If ``use_sudo is False`` this parameter
has no effect.
:type user: str
"""
if path is None:
raise ValueError("Path to the working copy is needed to checkout a "
"branch")
cmd = 'git checkout %s' % branch
with cd(path):
if use_sudo and user is None:
run_as_root(cmd)
elif use_sudo:
sudo(cmd, user=user)
else:
run(cmd)