/usr/share/pyshared/gbp/scripts/common/buildpackage.py is in git-buildpackage 0.6.0~git20120601.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | # vim: set fileencoding=utf-8 :
#
# (C) 2006-2011 Guido Guenther <agx@sigxcpu.org>
# (C) 2012 Intel Corporation <markus.lehtonen@linux.intel.com>
# 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
#
"""Common functionality for Debian and RPM buildpackage scripts"""
import os, os.path
import pipes
import tempfile
import shutil
from gbp.command_wrappers import (CatenateTarArchive)
from gbp.git import GitRepository
from gbp.errors import GbpError
import gbp.log
# when we want to reference the index in a treeish context we call it:
index_name = "INDEX"
# when we want to reference the working copy in treeish context we call it:
wc_name = "WC"
# index file name used to export working copy
wc_index = ".git/gbp_index"
def git_archive_submodules(repo, treeish, output, prefix, comp_type, comp_level, comp_opts):
"""
Create tar.gz of an archive with submodules
since git-archive always writes an end of tarfile trailer we concatenate
the generated archives using tar and compress the result.
Exception handling is left to the caller.
"""
tarfile = output.rsplit('.', 1)[0]
tempdir = tempfile.mkdtemp()
submodule_tarfile = os.path.join(tempdir, "submodule.tar")
try:
# generate main tarfile
repo.archive(format='tar', prefix='%s/' % (prefix),
output=tarfile, treeish=treeish)
# generate each submodule's tarfile and append it to the main archive
for (subdir, commit) in repo.get_submodules(treeish):
tarpath = [subdir, subdir[2:]][subdir.startswith("./")]
gbp.log.debug("Processing submodule %s (%s)" % (subdir, commit[0:8]))
repo.archive(format='tar', prefix='%s/%s/' % (prefix, tarpath),
output=submodule_tarfile, treeish=commit, cwd=subdir)
CatenateTarArchive(tarfile)(submodule_tarfile)
# compress the output
ret = os.system("%s -%s %s %s" % (comp_type, comp_level, comp_opts, tarfile))
if ret:
raise GbpError("Error creating %s: %d" % (output, ret))
finally:
shutil.rmtree(tempdir)
def git_archive_single(treeish, output, prefix, comp_type, comp_level, comp_opts):
"""
Create tar.gz of an archive without submodules
Exception handling is left to the caller.
"""
pipe = pipes.Template()
pipe.prepend("git archive --format=tar --prefix=%s/ %s" % (prefix, treeish), '.-')
pipe.append('%s -c -%s %s' % (comp_type, comp_level, comp_opts), '--')
ret = pipe.copy('', output)
if ret:
raise GbpError("Error creating %s: %d" % (output, ret))
#{ Functions to handle export-dir
def dump_tree(repo, export_dir, treeish, with_submodules):
"dump a tree to output_dir"
output_dir = os.path.dirname(export_dir)
prefix = os.path.basename(export_dir)
pipe = pipes.Template()
pipe.prepend('git archive --format=tar --prefix=%s/ %s' % (prefix, treeish), '.-')
pipe.append('tar -C %s -xf -' % output_dir, '-.')
top = os.path.abspath(os.path.curdir)
try:
ret = pipe.copy('', '')
if ret:
raise GbpError, "Error in dump_tree archive pipe"
if with_submodules:
if repo.has_submodules():
repo.update_submodules()
for (subdir, commit) in repo.get_submodules(treeish):
gbp.log.info("Processing submodule %s (%s)" % (subdir, commit[0:8]))
tarpath = [subdir, subdir[2:]][subdir.startswith("./")]
os.chdir(subdir)
pipe = pipes.Template()
pipe.prepend('git archive --format=tar --prefix=%s/%s/ %s' %
(prefix, tarpath, commit), '.-')
pipe.append('tar -C %s -xf -' % output_dir, '-.')
ret = pipe.copy('', '')
os.chdir(top)
if ret:
raise GbpError, "Error in dump_tree archive pipe in submodule %s" % subdir
except OSError, err:
gbp.log.err("Error dumping tree to %s: %s" % (output_dir, err[0]))
return False
except GbpError, err:
gbp.log.err(err)
return False
except Exception as e:
gbp.log.err("Error dumping tree to %s: %s" % (output_dir, e))
return False
finally:
os.chdir(top)
return True
def write_wc(repo):
"""write out the current working copy as a treeish object"""
repo.add_files(repo.path, force=True, index_file=wc_index)
tree = repo.write_tree(index_file=wc_index)
return tree
def drop_index():
"""drop our custom index"""
if os.path.exists(wc_index):
os.unlink(wc_index)
|