]> arthur.barton.de Git - bup.git/blobdiff - test/int/test_git.py
Support signed commits (i.e. the gpgsig header)
[bup.git] / test / int / test_git.py
index 0feb4108170dde072eac33298672c5ed97e652ca..339f8581bf84e34efcadba3be059d7fe1041aaa2 100644 (file)
@@ -3,7 +3,8 @@ from __future__ import absolute_import, print_function
 import sys
 from binascii import hexlify, unhexlify
 from subprocess import check_call
-import struct, os, time
+from functools import partial
+import struct, os
 import pytest
 
 from wvpytest import *
@@ -254,8 +255,9 @@ def test_commit_parsing(tmpdir):
     environ[b'GIT_AUTHOR_EMAIL'] = b'bup@a425bc70a02811e49bdf73ee56450e6f'
     environ[b'GIT_COMMITTER_EMAIL'] = environ[b'GIT_AUTHOR_EMAIL']
     try:
-        readpipe([b'git', b'init', workdir])
         environ[b'GIT_DIR'] = environ[b'BUP_DIR'] = repodir
+        readpipe([b'git', b'init', workdir])
+        exc(b'git', b'symbolic-ref', b'HEAD', b'refs/heads/main')
         git.check_repo_or_die(repodir)
         os.chdir(workdir)
         with open('foo', 'w') as f:
@@ -264,7 +266,7 @@ def test_commit_parsing(tmpdir):
         readpipe([b'git', b'commit', b'-am', b'Do something',
                   b'--author', b'Someone <someone@somewhere>',
                   b'--date', b'Sat Oct 3 19:48:49 2009 -0400'])
-        commit = readpipe([b'git', b'show-ref', b'-s', b'master']).strip()
+        commit = readpipe([b'git', b'show-ref', b'-s', b'main']).strip()
         parents = showval(commit, b'%P')
         tree = showval(commit, b'%T')
         cname = showval(commit, b'%cn')
@@ -291,7 +293,7 @@ def test_commit_parsing(tmpdir):
             f.write(b'baz\n')
         readpipe([b'git', b'add', '.'])
         readpipe([b'git', b'commit', b'-am', b'Do something else'])
-        child = readpipe([b'git', b'show-ref', b'-s', b'master']).strip()
+        child = readpipe([b'git', b'show-ref', b'-s', b'main']).strip()
         parents = showval(child, b'%P')
         commit_items = git.get_commit_items(child, git.cp())
         WVPASSEQ(commit_items.parents, [commit])
@@ -303,6 +305,42 @@ def test_commit_parsing(tmpdir):
         restore_env_var(b'GIT_COMMITTER_EMAIL', orig_committer_email)
 
 
+gpgsig_example_1 = b'''tree 3fab08ade2fbbda60bef180bb8e0cc5724d6bd4d
+parent 36db87b46a95ca5079f43dfe9b72220acab7c731
+author Rob Browning <rlb@defaultvalue.org> 1633397238 -0500
+committer Rob Browning <rlb@defaultvalue.org> 1633397238 -0500
+gpgsig -----BEGIN PGP SIGNATURE-----
+ ...
+ -----END PGP SIGNATURE-----
+
+Sample signed commit.
+'''
+
+gpgsig_example_2 = b'''tree 3fab08ade2fbbda60bef180bb8e0cc5724d6bd4d
+parent 36db87b46a95ca5079f43dfe9b72220acab7c731
+author Rob Browning <rlb@defaultvalue.org> 1633397238 -0500
+committer Rob Browning <rlb@defaultvalue.org> 1633397238 -0500
+gpgsig -----BEGIN PGP SIGNATURE-----
+ ...
+ -----END PGP SIGNATURE-----
+
+Sample signed commit.
+'''
+
+def test_commit_gpgsig_parsing():
+    c = git.parse_commit(gpgsig_example_1)
+    assert c.gpgsig
+    assert c.gpgsig.startswith(b'-----BEGIN PGP SIGNATURE-----\n')
+    assert c.gpgsig.endswith(b'\n-----END PGP SIGNATURE-----\n')
+    c = git.parse_commit(gpgsig_example_2)
+    assert c.gpgsig
+    assert c.gpgsig.startswith(b'-----BEGIN PGP SIGNATURE-----')
+    assert c.gpgsig.endswith(b'\n-----END PGP SIGNATURE-----\n\n')
+
+
 def test_new_commit(tmpdir):
     environ[b'BUP_DIR'] = bupdir = tmpdir + b'/bup'
     git.init_repo(bupdir)
@@ -503,3 +541,31 @@ def test_midx_close(tmpdir):
             continue
         # check that we don't have it open anymore
         WVPASSEQ(False, b'deleted' in fn)
+
+def test_config():
+    cfg_file = os.path.join(os.path.dirname(__file__), 'sample.conf')
+    no_such_file = os.path.join(os.path.dirname(__file__), 'nosuch.conf')
+    git_config_get = partial(git.git_config_get, cfg_file=cfg_file)
+    WVPASSEQ(git_config_get(b'bup.foo'), b'bar')
+    WVPASSEQ(git_config_get(b'bup.bup'), b'is great')
+    WVPASSEQ(git_config_get(b'bup.end'), b'end')
+    WVPASSEQ(git_config_get(b'bup.comments'), None)
+    WVPASSEQ(git_config_get(b'bup.;comments'), None)
+    WVPASSEQ(git_config_get(b'bup.and'), None)
+    WVPASSEQ(git_config_get(b'bup.#and'), None)
+
+    WVPASSEQ(git.git_config_get(b'bup.foo', cfg_file=no_such_file), None)
+
+    WVEXCEPT(git.GitError, git_config_get, b'bup.isbad', opttype='bool')
+    WVEXCEPT(git.GitError, git_config_get, b'bup.isbad', opttype='int')
+    WVPASSEQ(git_config_get(b'bup.isbad'), b'ok')
+    WVPASSEQ(True, git_config_get(b'bup.istrue1', opttype='bool'))
+    WVPASSEQ(True, git_config_get(b'bup.istrue2', opttype='bool'))
+    WVPASSEQ(True, git_config_get(b'bup.istrue3', opttype='bool'))
+    WVPASSEQ(False, git_config_get(b'bup.isfalse1', opttype='bool'))
+    WVPASSEQ(False, git_config_get(b'bup.isfalse2', opttype='bool'))
+    WVPASSEQ(None, git_config_get(b'bup.nosuchkey', opttype='bool'))
+    WVPASSEQ(1, git_config_get(b'bup.istrue1', opttype='int'))
+    WVPASSEQ(2, git_config_get(b'bup.istrue2', opttype='int'))
+    WVPASSEQ(0, git_config_get(b'bup.isfalse2', opttype='int'))
+    WVPASSEQ(0x777, git_config_get(b'bup.hex', opttype='int'))