config: read the right config if run from subdir

A step towards being able to run GBP tools from subdirectories.

Now expands '%(top_dir)s' and '%(git_dir)s' in config file path to root
of the working directory and git metadata directory, respectively.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
buildpackage: add 'force' option to write_wc()

To select whether to include file that would otherwise be ignored by
gitignore (.gitignore or .git/info/exclude).

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitArgs/add: support lists

Correctly support giving list(s) as an argument to GitArgs.add().

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/add_files: use GitArgs

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/add_files: add new option 'untracked'

With this option you can either only update already tracked files to
index the (untracked=False) or add new files, too.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
buildpackage: add 'untracked' option to write_wc()

Whether to ignore untracked files (untracked=False) or not
(untracked=True). Now, clones the temporary index file from the actual
index, in order to correctly update files.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
buildpackage: new "working copy" choices for --git-export

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.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Add gbp specific tempfile module

Minimal initial implementation that only adds tempdir parent directory
creation.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Universal configurable base tmpdir for all gbp tools

Adds support for a configurable tmpdir under which all gbp tools now
create their temporary directories and files.

NOTE: an exception is git-import-dscs which doesn't use the common
configuration system.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp-pq: move write_patch() back to Debian script

Moves the write_patch() function from the common pq submodule back to
the Debian-specific pq script. It is a bit too Debian-specific: RPM does
not support topics and no need to mangle the patch contents.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp-pq: readiness to configure the pq branch name

All other gbp branches have configurable names. This commit adds the
readiness for user to configure/change the name of the patch-queue
branches, as well.

Patch-queue is defined in options as a format string, where '%(branch)s'
refers to the debian/packaging branch. If the pq-branch format string
does not contain '%(branch)s', there is only one patch-queue branch and
the debian/packaging branch is used as its base branch. That is, e.g. a
'gbp-pq switch' operation from the patch-queue branch always switches to
the debian/packaging branch.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp-pq: refactor arguments of "apply patch" functions

The upcoming RPM side can't support topics.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Introduce rpm helpers

Preparation for RPM support.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
config: add rpm-specific option parser class

Adds a new GbpOptionParserRpm class for handling rpm-specific options.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp-pull: similar update strategy for all branches

Treat non-checked-out branches similarly to the current branch when
forcing update. That is, do git merge, instead of just setting the ref.

Also, renames fast_forward_branch() to update_branch() to better match
the functionality.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp-pull: two modes for --force

The 'force' option now has two possible values:
'merge': upstream branch is merged, even if fast-forward is not
possible.

'clean': check out a clean copy from the upstream if fast-forward is not
possible (i.e. no merge). Local changes are lost in this case.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Add 'packaging-dir' option to config.py

Needed by the upcoming rpm tools.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Rename internal var debian_branch -> packaging_branch

This is done in sake of more general purpose naming, intended for
enabling rpm support.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Add 'packaging-branch' cmdline option

This is the counterpart of 'debian-branch' (basically identical to that)
to not confuse rpm maintainers.

Also, adds this option to gbp-clone and gbp-pull commands (as an
alternative to the 'debian-branch option), which are usable for RPM in
their current form.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Rename internal var debian_tag -> packaging_tag

This is done in sake of more general purpose naming, intended for
enabling rpm support: to allow logical naming for rpm and to
share as much code between debian and rpm tools as possible.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>