#{ 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
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
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):
"""
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
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):
"""
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
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
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:
"""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
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
# 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
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
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))