gitmodifier: make the datetime object always have timezone

To be consistent with the date property and for easier compatibility
with git dates.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/get_commit_info: add patchname to info

Add a new 'patchname' field to the information returned by
get_commit_info. That is, the subject in a sanitized format, similar to
what git-format-patch uses.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
import-orig: keep working copy in sync with branch HEAD

Update working copy and index (to branch HEAD) if we modify the
currently checked-out branch. Otherwise the repository is left in
unclean state when the current branch is upstream or pristine-tar and
the '--no-merge' option is used.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
buildpackage: use get_commit_info() instead of get_subject()

Utilize the get_commit_info() method of GitRepository instead of the
buggy get_subject().

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository: drop the unused and buggy get_subject()

The get_commit_info() method should be used, instead.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/diff: allow single object

Allow diffing a single object, e.g. getting diff from single commit.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/diff: add 'stat' and 'summary' options

For getting diffstat and summary in the output.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/diff: always generate textual diffs

For example, the 'patch' utility does not support git binary diffs.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
pq: rewrite patch export functionality

Use our own function for constructing the patch files instead of using
the format-patch command of git. This way, we get the desired output
format directly, without the need for the error-prone "format-patch,
parse patch files, mangle and re-write patch files" cycle.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository: drop unused format_patch method

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
pq.format_patch: support file path filtering

Implements a filter option that allows filtering out changes to certain
files/paths in the patch-generation. A commit is totally ignored if all
files would be filtered out. The path filter is given as a Python
regexp.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
pq: properly generate non-ascii patch files

Encode non-ascii email headers properly. Also, set MIME headers
correctly for the message body if the commit message body contains
non-ascii characters.

The reason for constructing the message in a little bit "clumsy" way is
the intention is to match the output of git-format-patch as closely as
possible.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
pq: support patch-export commands

Support giving commands to pq as a meta tag in commit message. The
format is "Gbp: <command> [args]".

Currently, only one command is supported. namely 'ignore'. That is, one
can use 'Gbp: Ignore' in the commit message for ignoring the commit in
patch-generation.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
pq: add format_diff() function

For generating a patch file from a diff between two arbitrary commits.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GbpOptionParser: allow using the default 'dest' attribute

Make it possible to add options without explicitly defining the 'dest'
attribute - in which case the default of OptionParser is used.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/rev_parse: use _git_inout()

instead of the deprecated _git_getoutput() method.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository: raise GitRepositoryError instead of GbpError

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository/get_remote_repos: return URLs, too

In addition to the remote name, return remote URLs. Return value is now
a dict with remote name as the key and a list of URLs as the value. The
first value in the list is the effective fetch URL, the rest of the
values are push URLs.

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

Simple wrapper to the git-status command.

Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
GitRepository: allow repo inititialization from subdir

This allows initialization of a GitRepository object, even if the
current working directory (or path given to GitRepository) is not the
top level directory of the git repository.

Don't guess the git meta data dir, but, take it as reported by git
itself.

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