diff options
author | Guido Günther <agx@sigxcpu.org> | 2011-01-10 16:09:05 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2011-01-11 07:47:13 +0100 |
commit | 03f3d75d43458978ecc375f7e16cfc8f35b5ae99 (patch) | |
tree | 81e7ec81df5ff6a123e5f856d8c5e738c485cdd2 /examples | |
parent | 05d9ecb7e4eaf6cfc8942c5c47b6f9dde2e99459 (diff) | |
download | git-buildpackage-03f3d75d43458978ecc375f7e16cfc8f35b5ae99.tar.gz git-buildpackage-03f3d75d43458978ecc375f7e16cfc8f35b5ae99.tar.bz2 git-buildpackage-03f3d75d43458978ecc375f7e16cfc8f35b5ae99.zip |
Make gbp-create-remote-repo a first class citizen
Add manpage, move into path, add bash completion
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/gbp-create-remote-repo | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/examples/gbp-create-remote-repo b/examples/gbp-create-remote-repo deleted file mode 100755 index 6df67ae9..00000000 --- a/examples/gbp-create-remote-repo +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/python -u -# vim: set fileencoding=utf-8 : -# -# (C) 2010 Guido Guenther <agx@sigxcpu.org> -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# Based on the aa-create-git-repo and dom-new-git-repo shell scripts - -"""Create a remote repo based on the current one""" -# TODO: allow to add hooks by default - -import sys -import os, os.path -import urlparse -import subprocess -import tty, termios -from gbp.command_wrappers import (CommandExecFailed, PristineTar, GitCommand, - GitFetch) -from gbp.config import (GbpOptionParser, GbpOptionGroup) -from gbp.errors import GbpError -from gbp.git import (GitRepositoryError, GitRepository) -import gbp.log - -def print_config(remote, branches): - print """[remote "origin"] - url = %(url)s - fetch = +refs/heads/*:refs/remotes/origin/*""" % remote - - for branch in branches: - print " push = %s" % branch - - for branch in branches: - print """[branch "%s"] - remote = origin - merge = refs/heads/%s""" % (branch, branch) - - -def parse_remote(remote_url, pkg): - """Sanity check our remote URL""" - frags = urlparse.urlparse(remote_url) - if frags.scheme != 'ssh': - raise GbpError, "Remote URL must use ssh protocol." - if not '%(pkg)s' in remote_url: - raise GbpError, "Remote URL lacks \%(pkg)s" - remote = { 'pkg': pkg, - 'url' : remote_url % { 'pkg': pkg }, - 'dir': frags.path % { 'pkg': pkg }, - 'host': frags.netloc } - return remote - - -def read_yn(): - fd = sys.stdin.fileno() - old_settings = termios.tcgetattr(fd) - try: - tty.setraw(sys.stdin.fileno()) - ch = sys.stdin.read(1) - finally: - termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) - - if ch in ( 'y', 'Y' ): - return True - else: - return False - - -def setup_branch_tracking(remote, branches): - gitRemoteAdd = GitCommand("remote", ["add"]) - gitRemoteAdd(["origin", remote['url']]) - GitFetch()() - gitTrackRemote = GitCommand("branch", ["--set-upstream"]) - for branch in branches: - gitTrackRemote(["%s" % branch, "origin/%s" % branch]) - - -def push_branches(remote, branches): - gitPush = GitCommand("push") - gitPush([remote['url']] + branches) - gitPush([remote['url'], '--tags']) - - -def main(argv): - retval = 0 - - parser = GbpOptionParser(command=os.path.basename(argv[0]), prefix='', - usage='%prog [options] - create a remote repository') - branch_group = GbpOptionGroup(parser, "branch options", "branch layout options") - branch_group.add_config_file_option(option_name="remote-url-pattern", dest="remote_url") - parser.add_option_group(branch_group) - branch_group.add_config_file_option(option_name="upstream-branch", dest="upstream_branch") - branch_group.add_config_file_option(option_name="debian-branch", dest="debian_branch") - branch_group.add_boolean_config_file_option(option_name="pristine-tar", dest="pristine_tar") - branch_group.add_option("--track", dest='track', action="store_true", default=False, - help="Set up tracking for remote branches") - parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, - help="verbose command execution") - parser.add_config_file_option(option_name="color", dest="color", type='tristate') - - (options, args) = parser.parse_args(argv) - gbp.log.setup(options.color, options.verbose) - - try: - repo = GitRepository(os.path.curdir) - except GitRepositoryError: - gbp.log.err("%s is not a git repository" % (os.path.abspath('.'))) - return 1 - - try: - branches = [] - - for branch in [ options.debian_branch, options.upstream_branch ]: - if repo.has_branch(branch): - branches += [ branch ] - - if repo.has_branch(PristineTar.branch) and options.pristine_tar: - branches += [ PristineTar.branch ] - - pkg = os.path.basename (os.path.abspath(os.path.curdir)) - pkg = os.path.splitext(pkg)[0] - remote = parse_remote(options.remote_url, pkg) - - gbp.log.info("Shall I create a repository for '%(pkg)s' at '%(url)s' now? (y/n)?" % remote) - if not read_yn(): - raise GbpError, "Aborted." - - # Create and run the remote script - ssh = 'ssh %(host)s sh' % remote - remote_script = """ -cat <<EOF -set -e -umask 002 -if [ -d "%(dir)s" ]; then - echo "Repository at \"%(dir)s\" already exists - giving up." - exit 1 -fi -mkdir -p "%(dir)s" -cd "%(dir)s" -git init --bare --shared -echo "%(pkg)s packaging" > description -EOF""" % remote - - if options.verbose: - print remote_script - - p1 = subprocess.Popen([remote_script], stdout=subprocess.PIPE, shell=True) - p2 = subprocess.Popen([ssh], stdin=p1.stdout, shell=True) - p2.communicate() - if p2.returncode: - raise GbpError, "Error creating remote repository" - - push_branches(remote, branches) - if options.track: - setup_branch_tracking(remote, branches) - else: - gbp.log.info("You can now add:") - print_config(remote, branches) - gbp.log.info("to your .git/config to 'gbp-pull' and 'git push' in the future.") - - except CommandExecFailed: - retval = 1 - except GbpError, err: - if len(err.__str__()): - gbp.log.err(err) - retval = 1 - - return retval - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - -# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: |