From: wanchao-xu Date: Mon, 29 Apr 2024 06:19:39 +0000 (+0800) Subject: buildpackage & buildpackage_rpm: add new choices for '--git-export' option. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a70783136965b9d623bc3cbeb60841bccd648812;p=tools%2Fgit-buildpackage.git buildpackage & buildpackage_rpm: add new choices for '--git-export' option. Add support for building different kind of "working copies", when using the --git-export option: - 'WC.TRACKED': only use files that are already tracked - 'WC.UNTRACKED': use untracked files, too - 'WC.IGNORED': also add files that'd normally be ignored Using '--git-export=WC' beaves like before. Change-Id: Iaabe7979a885cfe2f67a26c0b33a1d198f0554dc Signed-off-by: wanchao-xu --- diff --git a/gbp/git/repository.py b/gbp/git/repository.py index a7810dcf..cad3e4a5 100644 --- a/gbp/git/repository.py +++ b/gbp/git/repository.py @@ -1379,7 +1379,8 @@ class GitRepository(object): #{ Files - def add_files(self, paths, force=False, index_file=None, work_tree=None): + def add_files(self, paths, force=False, untracked=True, index_file=None, + work_tree=None): """ Add files to a the repository @@ -1395,7 +1396,10 @@ class GitRepository(object): if isinstance(paths, str): paths = [paths] - args = ['-f'] if force else [] + args = GitArgs() + args.add_true(force, '-f') + args.add_cond(untracked, '-A', '-u') + args.add(paths) if index_file: extra_env['GIT_INDEX_FILE'] = index_file @@ -1403,7 +1407,7 @@ class GitRepository(object): if work_tree: extra_env['GIT_WORK_TREE'] = work_tree - self._git_command("add", args + paths, extra_env) + self._git_command("add", args.args, extra_env) def remove_files(self, paths, verbose=False): """ diff --git a/gbp/scripts/buildpackage.py b/gbp/scripts/buildpackage.py index f8677181..967f1e47 100755 --- a/gbp/scripts/buildpackage.py +++ b/gbp/scripts/buildpackage.py @@ -37,7 +37,7 @@ from gbp.deb.upstreamsource import DebianUpstreamSource, DebianAdditionalTarball from gbp.errors import GbpError import gbp.log import gbp.notifications -from gbp.scripts.common.buildpackage import (index_name, wc_name, +from gbp.scripts.common.buildpackage import (index_name, wc_names, dump_tree, write_wc, drop_index) from gbp.scripts.common import ExitCodes @@ -61,8 +61,10 @@ def maybe_write_tree(repo, options): if options.export_dir: if options.export == index_name: tree = repo.write_tree() - elif options.export == wc_name: - tree = write_wc(repo) + elif options.export in wc_names: + tree = write_wc(repo, + force=wc_names[options.export]['force'], + untracked=wc_names[options.export]['untracked']) else: tree = options.export if not repo.has_treeish(tree): @@ -274,7 +276,7 @@ def mangle_export_wc_opts(options): """ Make building with --export=WC simpler """ - if options.export == wc_name: + if options.export in wc_names: options.ignore_branch = True options.ignore_new = True diff --git a/gbp/scripts/buildpackage_rpm.py b/gbp/scripts/buildpackage_rpm.py index 03ddc97f..0c417fc5 100644 --- a/gbp/scripts/buildpackage_rpm.py +++ b/gbp/scripts/buildpackage_rpm.py @@ -35,7 +35,7 @@ from gbp.rpm.git import GitRepositoryError, RpmGitRepository from gbp.rpm.policy import RpmPkgPolicy from gbp.tmpfile import init_tmpdir, del_tmpdir, tempfile from gbp.scripts.common import ExitCodes -from gbp.scripts.common.buildpackage import (index_name, wc_name, +from gbp.scripts.common.buildpackage import (index_name, wc_names, dump_tree, write_wc, drop_index) from gbp.scripts.pq_rpm import update_patch_series, parse_spec from gbp.scripts.common.pq import is_pq_branch, pq_branch_name, pq_branch_base @@ -154,9 +154,11 @@ def get_tree(repo, tree_name): if tree_name == index_name: # Write a tree of the index tree = repo.write_tree() - elif tree_name == wc_name: + elif tree_name in wc_names: # Write a tree of the working copy - tree = write_wc(repo) + tree = write_wc(repo, + force=wc_names[tree_name]['force'], + untracked=wc_names[tree_name]['untracked']) else: tree = tree_name except GitRepositoryError as err: @@ -197,7 +199,7 @@ def guess_export_params(repo, options): """Get commit and tree from where to export packaging and patches""" tree = None branch = None - if options.export in [wc_name, index_name, 'HEAD']: + if options.export in wc_names.keys() + [index_name, 'HEAD']: branch = get_current_branch(repo) elif options.export in repo.get_local_branches(): branch = options.export diff --git a/gbp/scripts/common/buildpackage.py b/gbp/scripts/common/buildpackage.py index 7071cdc1..761fdca4 100644 --- a/gbp/scripts/common/buildpackage.py +++ b/gbp/scripts/common/buildpackage.py @@ -21,6 +21,7 @@ import os import os.path import pipes +import shutil from gbp.git import GitRepositoryError from gbp.pkg.git import PkgGitRepository from gbp.errors import GbpError @@ -29,7 +30,10 @@ 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" +wc_names = {'WC': {'force': True, 'untracked': True}, + 'WC.TRACKED': {'force': False, 'untracked': False}, + 'WC.UNTRACKED': {'force': False, 'untracked': True}, + 'WC.IGNORED': {'force': True, 'untracked': True}} # Functions to handle export-dir @@ -87,11 +91,11 @@ def wc_index(repo): return os.path.join(repo.git_dir, "gbp_index") -def write_wc(repo, force=True): +def write_wc(repo, force=True, untracked=True): """write out the current working copy as a treeish object""" - index_file = wc_index(repo) - repo.add_files(repo.path, force=force, index_file=index_file) - tree = repo.write_tree(index_file=index_file) + clone_index(repo) + repo.add_files(repo.path, force=force, untracked=untracked, index_file=wc_index(repo)) + tree = repo.write_tree(index_file=wc_index(repo)) return tree @@ -100,3 +104,10 @@ def drop_index(repo): index_file = wc_index(repo) if os.path.exists(index_file): os.unlink(index_file) + + +def clone_index(repo): + """Copy the current index file to our custom index file""" + indexfn = os.path.join(repo.git_dir, "index") + if os.path.exists(indexfn): + shutil.copy2(indexfn, wc_index(repo))