GitArgs/add: support iterable and non-string args

Support giving iterables (other than basestring, e.g. list(s)) as an
argument to GitArgs.add(). Also, add support non-iterable arguments that
support the str() conversion.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitArgs: utilize the add() method in other add_X methods

Only use the add() method for updating the argument list. This makes the
code more robust and makes all add method variant types support the same
argument types.

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>
Add 'packaging-tag' option to config.py

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

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