Example #1
0
    def test_parse_header_trailing_newline(self):
        c = Commit.from_string(b'''\
tree a7d6277f78d3ecd0230a1a5df6db00b1d9c521ac
parent c09b6dec7a73760fbdb478383a3c926b18db8bbe
author Neil Matatall <*****@*****.**> 1461964057 -1000
committer Neil Matatall <*****@*****.**> 1461964057 -1000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJXI80ZCRA6pcNDcVZ70gAAarcIABs72xRX3FWeox349nh6ucJK
 CtwmBTusez2Zwmq895fQEbZK7jpaGO5TRO4OvjFxlRo0E08UFx3pxZHSpj6bsFeL
 hHsDXnCaotphLkbgKKRdGZo7tDqM84wuEDlh4MwNe7qlFC7bYLDyysc81ZX5lpMm
 2MFF1TvjLAzSvkT7H1LPkuR3hSvfCYhikbPOUNnKOo0sYjeJeAJ/JdAVQ4mdJIM0
 gl3REp9+A+qBEpNQI7z94Pg5Bc5xenwuDh3SJgHvJV6zBWupWcdB3fAkVd4TPnEZ
 nHxksHfeNln9RKseIDcy4b2ATjhDNIJZARHNfr6oy4u3XPW4svRqtBsLoMiIeuI=
 =ms6q
 -----END PGP SIGNATURE-----
 

3.3.0 version bump and docs
''')
        self.assertEqual([], c.extra)
        self.assertEqual(
            b'''\
-----BEGIN PGP SIGNATURE-----

wsBcBAABCAAQBQJXI80ZCRA6pcNDcVZ70gAAarcIABs72xRX3FWeox349nh6ucJK
CtwmBTusez2Zwmq895fQEbZK7jpaGO5TRO4OvjFxlRo0E08UFx3pxZHSpj6bsFeL
hHsDXnCaotphLkbgKKRdGZo7tDqM84wuEDlh4MwNe7qlFC7bYLDyysc81ZX5lpMm
2MFF1TvjLAzSvkT7H1LPkuR3hSvfCYhikbPOUNnKOo0sYjeJeAJ/JdAVQ4mdJIM0
gl3REp9+A+qBEpNQI7z94Pg5Bc5xenwuDh3SJgHvJV6zBWupWcdB3fAkVd4TPnEZ
nHxksHfeNln9RKseIDcy4b2ATjhDNIJZARHNfr6oy4u3XPW4svRqtBsLoMiIeuI=
=ms6q
-----END PGP SIGNATURE-----\n''', c.gpgsig)
Example #2
0
    def verify_revision_signature(self, revision_id, gpg_strategy):
        """Verify the signature on a revision.

        :param revision_id: the revision to verify
        :gpg_strategy: the GPGStrategy object to used

        :return: gpg.SIGNATURE_VALID or a failed SIGNATURE_ value
        """
        from breezy import gpg
        with self.lock_read():
            git_commit_id, mapping = self.lookup_bzr_revision_id(revision_id)
            try:
                commit = self._git.object_store[git_commit_id]
            except KeyError:
                raise errors.NoSuchRevision(self, revision_id)

            if commit.gpgsig is None:
                return gpg.SIGNATURE_NOT_SIGNED, None

            without_sig = Commit.from_string(commit.as_raw_string())
            without_sig.gpgsig = None

            (result, key,
             plain_text) = gpg_strategy.verify(without_sig.as_raw_string(),
                                               commit.gpgsig)
            return (result, key)
Example #3
0
    def test_parse_header_trailing_newline(self):
        c = Commit.from_string(b'''\
tree a7d6277f78d3ecd0230a1a5df6db00b1d9c521ac
parent c09b6dec7a73760fbdb478383a3c926b18db8bbe
author Neil Matatall <*****@*****.**> 1461964057 -1000
committer Neil Matatall <*****@*****.**> 1461964057 -1000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJXI80ZCRA6pcNDcVZ70gAAarcIABs72xRX3FWeox349nh6ucJK
 CtwmBTusez2Zwmq895fQEbZK7jpaGO5TRO4OvjFxlRo0E08UFx3pxZHSpj6bsFeL
 hHsDXnCaotphLkbgKKRdGZo7tDqM84wuEDlh4MwNe7qlFC7bYLDyysc81ZX5lpMm
 2MFF1TvjLAzSvkT7H1LPkuR3hSvfCYhikbPOUNnKOo0sYjeJeAJ/JdAVQ4mdJIM0
 gl3REp9+A+qBEpNQI7z94Pg5Bc5xenwuDh3SJgHvJV6zBWupWcdB3fAkVd4TPnEZ
 nHxksHfeNln9RKseIDcy4b2ATjhDNIJZARHNfr6oy4u3XPW4svRqtBsLoMiIeuI=
 =ms6q
 -----END PGP SIGNATURE-----
 

3.3.0 version bump and docs
''')  # noqa: W291,W293
        self.assertEqual([], c.extra)
        self.assertEqual(b'''\
-----BEGIN PGP SIGNATURE-----

wsBcBAABCAAQBQJXI80ZCRA6pcNDcVZ70gAAarcIABs72xRX3FWeox349nh6ucJK
CtwmBTusez2Zwmq895fQEbZK7jpaGO5TRO4OvjFxlRo0E08UFx3pxZHSpj6bsFeL
hHsDXnCaotphLkbgKKRdGZo7tDqM84wuEDlh4MwNe7qlFC7bYLDyysc81ZX5lpMm
2MFF1TvjLAzSvkT7H1LPkuR3hSvfCYhikbPOUNnKOo0sYjeJeAJ/JdAVQ4mdJIM0
gl3REp9+A+qBEpNQI7z94Pg5Bc5xenwuDh3SJgHvJV6zBWupWcdB3fAkVd4TPnEZ
nHxksHfeNln9RKseIDcy4b2ATjhDNIJZARHNfr6oy4u3XPW4svRqtBsLoMiIeuI=
=ms6q
-----END PGP SIGNATURE-----\n''', c.gpgsig)
Example #4
0
    def test_check_commit_with_overflow_date(self):
        """Date with overflow should raise an ObjectFormatException when checked

        """
        identity_with_wrong_time = (
            b'Igor Sysoev <*****@*****.**> 18446743887488505614 +42707004')
        commit0 = Commit.from_string(self.make_commit_text(
                author=identity_with_wrong_time,
                committer=default_committer))
        commit1 = Commit.from_string(self.make_commit_text(
                author=default_committer,
                committer=identity_with_wrong_time))

        # Those fails when triggering the check() method
        for commit in [commit0, commit1]:
            with self.assertRaises(ObjectFormatException):
                commit.check()
Example #5
0
    def test_check_commit_with_overflow_date(self):
        """Date with overflow should raise an ObjectFormatException when checked

        """
        identity_with_wrong_time = (
            b'Igor Sysoev <*****@*****.**> 18446743887488505614 +42707004')
        commit0 = Commit.from_string(self.make_commit_text(
                author=identity_with_wrong_time,
                committer=default_committer))
        commit1 = Commit.from_string(self.make_commit_text(
                author=default_committer,
                committer=identity_with_wrong_time))

        # Those fails when triggering the check() method
        for commit in [commit0, commit1]:
            with self.assertRaises(ObjectFormatException):
                commit.check()
Example #6
0
 def test_custom(self):
     c = Commit.from_string(
             'tree d80c186a03f423a81b39df39dc87fd269736ca86\n'
             'parent ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd\n'
             'parent 4cffe90e0a41ad3f5190079d7c8f036bde29cbe6\n'
             'author James Westby <*****@*****.**> 1174773719 +0000\n'
             'committer James Westby <*****@*****.**> 1174773719 +0000\n'
             'extra-field data\n'
             '\n'
             'Merge ../b\n')
     self.assertEquals([('extra-field', 'data')], c.extra)
Example #7
0
 def test_simple(self):
     c = Commit.from_string(self.make_commit_text())
     self.assertEqual("Merge ../b\n", c.message)
     self.assertEqual("James Westby <*****@*****.**>", c.author)
     self.assertEqual("James Westby <*****@*****.**>", c.committer)
     self.assertEqual("d80c186a03f423a81b39df39dc87fd269736ca86", c.tree)
     self.assertEqual(
         ["ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd", "4cffe90e0a41ad3f5190079d7c8f036bde29cbe6"], c.parents
     )
     expected_time = datetime.datetime(2007, 3, 24, 22, 1, 59)
     self.assertEqual(expected_time, datetime.datetime.utcfromtimestamp(c.commit_time))
     self.assertEqual(0, c.commit_timezone)
     self.assertEqual(expected_time, datetime.datetime.utcfromtimestamp(c.author_time))
     self.assertEqual(0, c.author_timezone)
     self.assertEqual(None, c.encoding)
Example #8
0
    def test_parse_gpgsig(self):
        c = Commit.from_string(
            b"""tree aaff74984cccd156a469afa7d9ab10e4777beb24
author Jelmer Vernooij <*****@*****.**> 1412179807 +0200
committer Jelmer Vernooij <*****@*****.**> 1412179807 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCgAGBQJULCdfAAoJEACAbyvXKaRXuKwP/RyP9PA49uAvu8tQVCC/uBa8
 vi975+xvO14R8Pp8k2nps7lSxCdtCd+xVT1VRHs0wNhOZo2YCVoU1HATkPejqSeV
 NScTHcxnk4/+bxyfk14xvJkNp7FlQ3npmBkA+lbV0Ubr33rvtIE5jiJPyz+SgWAg
 xdBG2TojV0squj00GoH/euK6aX7GgZtwdtpTv44haCQdSuPGDcI4TORqR6YSqvy3
 GPE+3ZqXPFFb+KILtimkxitdwB7CpwmNse2vE3rONSwTvi8nq3ZoQYNY73CQGkUy
 qoFU0pDtw87U3niFin1ZccDgH0bB6624sLViqrjcbYJeg815Htsu4rmzVaZADEVC
 XhIO4MThebusdk0AcNGjgpf3HRHk0DPMDDlIjm+Oao0cqovvF6VyYmcb0C+RmhJj
 dodLXMNmbqErwTk3zEkW0yZvNIYXH7m9SokPCZa4eeIM7be62X6h1mbt0/IU6Th+
 v18fS0iTMP/Viug5und+05C/v04kgDo0CPphAbXwWMnkE4B6Tl9sdyUYXtvQsL7x
 0+WP1gL27ANqNZiI07Kz/BhbBAQI/+2TFT7oGr0AnFPQ5jHp+3GpUf6OKuT1wT3H
 ND189UFuRuubxb42vZhpcXRbqJVWnbECTKVUPsGZqat3enQUB63uM4i6/RdONDZA
 fDeF1m4qYs+cUXKNUZ03
 =X6RT
 -----END PGP SIGNATURE-----

foo
""")
        self.assertEqual(b'foo\n', c.message)
        self.assertEqual([], c.extra)
        self.assertEqual(
            b"""-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABCgAGBQJULCdfAAoJEACAbyvXKaRXuKwP/RyP9PA49uAvu8tQVCC/uBa8
vi975+xvO14R8Pp8k2nps7lSxCdtCd+xVT1VRHs0wNhOZo2YCVoU1HATkPejqSeV
NScTHcxnk4/+bxyfk14xvJkNp7FlQ3npmBkA+lbV0Ubr33rvtIE5jiJPyz+SgWAg
xdBG2TojV0squj00GoH/euK6aX7GgZtwdtpTv44haCQdSuPGDcI4TORqR6YSqvy3
GPE+3ZqXPFFb+KILtimkxitdwB7CpwmNse2vE3rONSwTvi8nq3ZoQYNY73CQGkUy
qoFU0pDtw87U3niFin1ZccDgH0bB6624sLViqrjcbYJeg815Htsu4rmzVaZADEVC
XhIO4MThebusdk0AcNGjgpf3HRHk0DPMDDlIjm+Oao0cqovvF6VyYmcb0C+RmhJj
dodLXMNmbqErwTk3zEkW0yZvNIYXH7m9SokPCZa4eeIM7be62X6h1mbt0/IU6Th+
v18fS0iTMP/Viug5und+05C/v04kgDo0CPphAbXwWMnkE4B6Tl9sdyUYXtvQsL7x
0+WP1gL27ANqNZiI07Kz/BhbBAQI/+2TFT7oGr0AnFPQ5jHp+3GpUf6OKuT1wT3H
ND189UFuRuubxb42vZhpcXRbqJVWnbECTKVUPsGZqat3enQUB63uM4i6/RdONDZA
fDeF1m4qYs+cUXKNUZ03
=X6RT
-----END PGP SIGNATURE-----""", c.gpgsig)
Example #9
0
 def test_simple(self):
     c = Commit.from_string(self.make_commit_text())
     self.assertEqual('Merge ../b\n', c.message)
     self.assertEqual('James Westby <*****@*****.**>', c.author)
     self.assertEqual('James Westby <*****@*****.**>',
                       c.committer)
     self.assertEqual('d80c186a03f423a81b39df39dc87fd269736ca86', c.tree)
     self.assertEqual(['ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd',
                        '4cffe90e0a41ad3f5190079d7c8f036bde29cbe6'],
                       c.parents)
     expected_time = datetime.datetime(2007, 3, 24, 22, 1, 59)
     self.assertEqual(expected_time,
                       datetime.datetime.utcfromtimestamp(c.commit_time))
     self.assertEqual(0, c.commit_timezone)
     self.assertEqual(expected_time,
                       datetime.datetime.utcfromtimestamp(c.author_time))
     self.assertEqual(0, c.author_timezone)
     self.assertEqual(None, c.encoding)
Example #10
0
 def test_simple(self):
     c = Commit.from_string(
             'tree d80c186a03f423a81b39df39dc87fd269736ca86\n'
             'parent ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd\n'
             'parent 4cffe90e0a41ad3f5190079d7c8f036bde29cbe6\n'
             'author James Westby <*****@*****.**> 1174773719 +0000\n'
             'committer James Westby <*****@*****.**> 1174773719 +0000\n'
             '\n'
             'Merge ../b\n')
     self.assertEquals('Merge ../b\n', c.message)
     self.assertEquals('James Westby <*****@*****.**>',
         c.author)
     self.assertEquals('James Westby <*****@*****.**>',
         c.committer)
     self.assertEquals('d80c186a03f423a81b39df39dc87fd269736ca86',
         c.tree)
     self.assertEquals(['ab64bbdcc51b170d21588e5c5d391ee5c0c96dfd',
                       '4cffe90e0a41ad3f5190079d7c8f036bde29cbe6'],
         c.parents)
Example #11
0
    def test_parse_gpgsig(self):
        c = Commit.from_string(b"""tree aaff74984cccd156a469afa7d9ab10e4777beb24
author Jelmer Vernooij <*****@*****.**> 1412179807 +0200
committer Jelmer Vernooij <*****@*****.**> 1412179807 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCgAGBQJULCdfAAoJEACAbyvXKaRXuKwP/RyP9PA49uAvu8tQVCC/uBa8
 vi975+xvO14R8Pp8k2nps7lSxCdtCd+xVT1VRHs0wNhOZo2YCVoU1HATkPejqSeV
 NScTHcxnk4/+bxyfk14xvJkNp7FlQ3npmBkA+lbV0Ubr33rvtIE5jiJPyz+SgWAg
 xdBG2TojV0squj00GoH/euK6aX7GgZtwdtpTv44haCQdSuPGDcI4TORqR6YSqvy3
 GPE+3ZqXPFFb+KILtimkxitdwB7CpwmNse2vE3rONSwTvi8nq3ZoQYNY73CQGkUy
 qoFU0pDtw87U3niFin1ZccDgH0bB6624sLViqrjcbYJeg815Htsu4rmzVaZADEVC
 XhIO4MThebusdk0AcNGjgpf3HRHk0DPMDDlIjm+Oao0cqovvF6VyYmcb0C+RmhJj
 dodLXMNmbqErwTk3zEkW0yZvNIYXH7m9SokPCZa4eeIM7be62X6h1mbt0/IU6Th+
 v18fS0iTMP/Viug5und+05C/v04kgDo0CPphAbXwWMnkE4B6Tl9sdyUYXtvQsL7x
 0+WP1gL27ANqNZiI07Kz/BhbBAQI/+2TFT7oGr0AnFPQ5jHp+3GpUf6OKuT1wT3H
 ND189UFuRuubxb42vZhpcXRbqJVWnbECTKVUPsGZqat3enQUB63uM4i6/RdONDZA
 fDeF1m4qYs+cUXKNUZ03
 =X6RT
 -----END PGP SIGNATURE-----

foo
""")
        self.assertEqual(b'foo\n', c.message)
        self.assertEqual([], c.extra)
        self.assertEqual(b"""-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABCgAGBQJULCdfAAoJEACAbyvXKaRXuKwP/RyP9PA49uAvu8tQVCC/uBa8
vi975+xvO14R8Pp8k2nps7lSxCdtCd+xVT1VRHs0wNhOZo2YCVoU1HATkPejqSeV
NScTHcxnk4/+bxyfk14xvJkNp7FlQ3npmBkA+lbV0Ubr33rvtIE5jiJPyz+SgWAg
xdBG2TojV0squj00GoH/euK6aX7GgZtwdtpTv44haCQdSuPGDcI4TORqR6YSqvy3
GPE+3ZqXPFFb+KILtimkxitdwB7CpwmNse2vE3rONSwTvi8nq3ZoQYNY73CQGkUy
qoFU0pDtw87U3niFin1ZccDgH0bB6624sLViqrjcbYJeg815Htsu4rmzVaZADEVC
XhIO4MThebusdk0AcNGjgpf3HRHk0DPMDDlIjm+Oao0cqovvF6VyYmcb0C+RmhJj
dodLXMNmbqErwTk3zEkW0yZvNIYXH7m9SokPCZa4eeIM7be62X6h1mbt0/IU6Th+
v18fS0iTMP/Viug5und+05C/v04kgDo0CPphAbXwWMnkE4B6Tl9sdyUYXtvQsL7x
0+WP1gL27ANqNZiI07Kz/BhbBAQI/+2TFT7oGr0AnFPQ5jHp+3GpUf6OKuT1wT3H
ND189UFuRuubxb42vZhpcXRbqJVWnbECTKVUPsGZqat3enQUB63uM4i6/RdONDZA
fDeF1m4qYs+cUXKNUZ03
=X6RT
-----END PGP SIGNATURE-----""", c.gpgsig)
Example #12
0
    def test_mangled_author_line(self):
        """Mangled author line should successfully parse"""
        author_line = (
            b'Karl MacMillan <*****@*****.**> <"Karl MacMillan '
            b'<*****@*****.**>"> 1197475547 -0500'
        )
        expected_identity = (
            b'Karl MacMillan <*****@*****.**> <"Karl MacMillan '
            b'<*****@*****.**>">'
        )
        commit = Commit.from_string(
            self.make_commit_text(author=author_line)
        )

        # The commit parses properly
        self.assertEqual(commit.author, expected_identity)

        # But the check fails because the author identity is bogus
        with self.assertRaises(ObjectFormatException):
            commit.check()
Example #13
0
    def test_mangled_author_line(self):
        """Mangled author line should successfully parse"""
        author_line = (
            b'Karl MacMillan <*****@*****.**> <"Karl MacMillan '
            b'<*****@*****.**>"> 1197475547 -0500'
        )
        expected_identity = (
            b'Karl MacMillan <*****@*****.**> <"Karl MacMillan '
            b'<*****@*****.**>">'
        )
        commit = Commit.from_string(
            self.make_commit_text(author=author_line)
        )

        # The commit parses properly
        self.assertEqual(commit.author, expected_identity)

        # But the check fails because the author identity is bogus
        with self.assertRaises(ObjectFormatException):
            commit.check()
Example #14
0
 def test_encoding(self):
     c = Commit.from_string(self.make_commit_text(encoding='UTF-8'))
     self.assertEquals('UTF-8', c.encoding)
Example #15
0
 def test_custom(self):
     c = Commit.from_string(self.make_commit_text(
       extra={'extra-field': 'data'}))
     self.assertEquals([('extra-field', 'data')], c.extra)
Example #16
0
 def test_encoding(self):
     c = Commit.from_string(self.make_commit_text(encoding='UTF-8'))
     self.assertEqual('UTF-8', c.encoding)
Example #17
0
 def test_custom(self):
     c = Commit.from_string(self.make_commit_text(
       extra={'extra-field': 'data'}))
     self.assertEqual([('extra-field', 'data')], c.extra)
Example #18
0
 def test_custom(self):
     c = Commit.from_string(self.make_commit_text(extra={"extra-field": "data"}))
     self.assertEqual([("extra-field", "data")], c.extra)
Example #19
0
 def test_encoding(self):
     c = Commit.from_string(self.make_commit_text(encoding="UTF-8"))
     self.assertEqual("UTF-8", c.encoding)