qisrc.git – Git related tools¶
A Pythonic git API
qisrc.git.Git¶
- 
class qisrc.git.Git(repo)¶
- The Git represent a git tree - 
call(*args, **kwargs)¶
- Call a git command - Parameters: - args – The arguments of the command. For instance [“frobnicate”, “–spam=eggs”]
- kwargs – - Will be passed to subprocess.check_call()
- command, with the following changes:
 - if cwd is not given it will be self.repo instead
- if env is not given it will be read from the config file
- if raises is False, no exception will be raised if command fails, and a (retcode, output) tuple will be returned.
 
 
 - 
transaction(*args, **kwds)¶
- Start a series of git commands 
 - 
get_config(name)¶
- Get a git config value. Return None if not found 
 - 
set_config(name, value)¶
- Set a new config value. Will be created if it does not exist 
 - 
ls_files()¶
- Calls git ls-files and returns a list 
 - 
get_current_ref(ref='HEAD')¶
- return the current ref git symbolic-ref HEAD else: git name-rev –name-only –always HEAD 
 - 
get_current_branch()¶
- return the current branch 
 - 
clone(*args, **kwargs)¶
- Wrapper for git clone 
 - 
update_submodules(raises=True)¶
- Update submodule, cloning them if necessary 
 - 
get_local_branches()¶
- Get the list of the local branches in a dict master -> tracking branch 
 - 
is_valid()¶
- Check if the worktree is a valid git tree. 
 - 
require_clean_worktree()¶
- Taken from /usr/lib/git-core/git-sh-setup return a tuple (bool, message) so that you can be more verbose in case the worktree is not clean 
 - 
get_status(untracked=True)¶
- Return the output of status or None if it failed. 
 - 
is_clean(untracked=True)¶
- Returns true if working dir is clean. (i.e. no untracked files, no unstaged changes) - Parameters: - untracked – will return True even if there are untracked files. 
 - 
is_empty()¶
- Returns true if there are no commits yet (between git init and git commit 
 - 
set_remote(name, url)¶
- Set a new remote with the given name and url 
 - 
set_tracking_branch(branch, remote_name, remote_branch=None)¶
- Update the configuration of a branch to track a given remote branch - Parameters: - branch – the branch to set configuration for
- remote_name – the name of the remove (‘origin’ in most cases)
- remote_branch – the name of the remote to track. If not given will be the same of the branch name
 
 - 
sync_branch(branch, fetch_first=True)¶
- git pull –rebase on steroids: - do not try anything if the worktree is not clean
- update submodules and detect broken submodules configs
- if no development occurred (master == origin/master), reset the local branch next to the remote (don’t try to rebase, maybe there was a push -f)
- if on the correct branch, rebase it
 - Return a tuple (status, message), where status can be:
- None: sync was skipped, but there was no error
- False: sync failed
- True: sync succeeded
 
 
 - 
is_ff(local_sha1, remote_sha1)¶
- Check local_sha1 is fast-forward with remote_sha1. Return True / False or None in case of error with merge-base. 
 - 
get_ref_sha1(ref)¶
- Return the sha1 from a ref. None if not found. 
 - 
sync_branch_devel(master_branch, fetch_first=True)¶
- Make sure master stays compatible with your development branch Checks if your local master branch can be fast-forwarded to remote Update master’s HEAD if it’s the case 
 - 
get_log(before_ref, after_ref)¶
- Return a list of commits between two refspecs, in natural order (most recent commits last) - Each commit is a dict containing, ‘sha1’ and ‘message’ - FIXME: parse author and date ? 
 - 
safe_checkout(branch, remote, force=False)¶
- Checkout or create the branch next to the matching remote branch. - Return either (True, None) if all went well, or (False, error) in case of error 
 
- 
