mirror of
https://seed.radicle.dev/rad:z6cFWeWpnZNHh9rUW8phgA3b5yGt.git
synced 2026-10-24 05:40:38 +08:00
git-commit: introduce git-commit crate
Porting the commit code that is found in heartwood[0]. It represents a parsed git commit object -- sans the id for the commit itself. [0]: https://github.com/radicle-dev/heartwood/blob/16b22d9178fa6a1aaf2ecb01ec97e067399c5286/radicle/src/git.rs#L392-L575 Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
use std::str::FromStr as _;
|
||||
|
||||
use git_commit::Commit;
|
||||
|
||||
const UNSIGNED: &str = "\
|
||||
tree c66cc435f83ed0fba90ed4500e9b4b96e9bd001b
|
||||
parent af06ad645133f580a87895353508053c5de60716
|
||||
author Alexis Sellier <alexis@radicle.xyz> 1664467633 +0200
|
||||
committer Alexis Sellier <alexis@radicle.xyz> 1664786099 -0200
|
||||
|
||||
Add SSH functionality with new `radicle-ssh`
|
||||
|
||||
We borrow code from `thrussh`, refactored to be runtime-less.
|
||||
";
|
||||
|
||||
const SSH_SIGNATURE: &str = "\
|
||||
-----BEGIN SSH SIGNATURE-----
|
||||
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgvjrQogRxxLjzzWns8+mKJAGzEX
|
||||
4fm2ALoN7pyvD2ttQAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
|
||||
AAAAQIQvhIewOgGfnXLgR5Qe1ZEr2vjekYXTdOfNWICi6ZiosgfZnIqV0enCPC4arVqQg+
|
||||
GPp0HqxaB911OnSAr6bwU=
|
||||
-----END SSH SIGNATURE-----";
|
||||
|
||||
const PGP_SIGNATURE: &str = "\
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
iQIzBAABCAAdFiEEHe7BWIo9taTY6TIiJVL7b2QGbLcFAmNcDhsACgkQJVL7b2QG
|
||||
bLcc9Q//RgKf5N4enta9AuszGJZvdFhMPfIDUdw+WAZA6Z8zDPb/aAXZrPP/KIOM
|
||||
zmX08FTqjP9B9YeWrEcFuAtxsRNqbDKrfpko9Y6bTsdrAJg3WIypBb9F8YDKJ6BO
|
||||
CORJJqWOsLW129jW+mJDhcE0YTvPlcMiMI2qjVXKhU6Ag11W8IRZyTb9tvEaDjBR
|
||||
YUnkPvgubv61K9BeUKexE2MakPBldaQtl0MF1Dk7/zo5btLd+KP0SOUKEhuMEu5b
|
||||
LATHHdiYjt/2Xz7q8EcrFxXUaipxZe89dfTdi2ooJQw3ZDqjDHsGTHpDeBuzuSaJ
|
||||
9fKVRwFz/78onfHPhmU4wfUhh+Fcl90p5/T+4dt2K6cr+7rq078e+aJYxkX2d0MG
|
||||
PG0xGP0RN4g+X92K1kGuzoe4870xAnRTNh5nUB+X9snO8tVqQZTb0M2yI+sTsKrv
|
||||
w/f+uiqL6e9DgIxlO5dgiNHCVoCs1QJ900jUGisrlzS4+n6GzMsG6s3c01X4yY9G
|
||||
Ou/kGkMsn7tqejqC9RufygcchCFZqYwaHQwPkiYhfYGMarMpoCFvll0h8tSparpS
|
||||
nnpAQXVdu8m3v1YdPUuTg5ksxSOe9HCIlVXGFhxy3iqCVRn+51FRnUI63rMTOm9/
|
||||
LBqzvji02lDUPGqPgXfcCS0ty8FM2flBIXnwb8TDzCaPYhf53+U=
|
||||
=6dw2
|
||||
-----END PGP SIGNATURE-----";
|
||||
|
||||
const SIGNED: &str = "\
|
||||
tree c66cc435f83ed0fba90ed4500e9b4b96e9bd001b
|
||||
parent af06ad645133f580a87895353508053c5de60716
|
||||
author Alexis Sellier <alexis@radicle.xyz> 1664467633 +0200
|
||||
committer Alexis Sellier <alexis@radicle.xyz> 1664786099 -0200
|
||||
other e6fe3c97619deb8ab4198620f9a7eb79d98363dd
|
||||
gpgsig -----BEGIN SSH SIGNATURE-----
|
||||
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgvjrQogRxxLjzzWns8+mKJAGzEX
|
||||
4fm2ALoN7pyvD2ttQAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
|
||||
AAAAQIQvhIewOgGfnXLgR5Qe1ZEr2vjekYXTdOfNWICi6ZiosgfZnIqV0enCPC4arVqQg+
|
||||
GPp0HqxaB911OnSAr6bwU=
|
||||
-----END SSH SIGNATURE-----
|
||||
gpgsig -----BEGIN PGP SIGNATURE-----
|
||||
iQIzBAABCAAdFiEEHe7BWIo9taTY6TIiJVL7b2QGbLcFAmNcDhsACgkQJVL7b2QG
|
||||
bLcc9Q//RgKf5N4enta9AuszGJZvdFhMPfIDUdw+WAZA6Z8zDPb/aAXZrPP/KIOM
|
||||
zmX08FTqjP9B9YeWrEcFuAtxsRNqbDKrfpko9Y6bTsdrAJg3WIypBb9F8YDKJ6BO
|
||||
CORJJqWOsLW129jW+mJDhcE0YTvPlcMiMI2qjVXKhU6Ag11W8IRZyTb9tvEaDjBR
|
||||
YUnkPvgubv61K9BeUKexE2MakPBldaQtl0MF1Dk7/zo5btLd+KP0SOUKEhuMEu5b
|
||||
LATHHdiYjt/2Xz7q8EcrFxXUaipxZe89dfTdi2ooJQw3ZDqjDHsGTHpDeBuzuSaJ
|
||||
9fKVRwFz/78onfHPhmU4wfUhh+Fcl90p5/T+4dt2K6cr+7rq078e+aJYxkX2d0MG
|
||||
PG0xGP0RN4g+X92K1kGuzoe4870xAnRTNh5nUB+X9snO8tVqQZTb0M2yI+sTsKrv
|
||||
w/f+uiqL6e9DgIxlO5dgiNHCVoCs1QJ900jUGisrlzS4+n6GzMsG6s3c01X4yY9G
|
||||
Ou/kGkMsn7tqejqC9RufygcchCFZqYwaHQwPkiYhfYGMarMpoCFvll0h8tSparpS
|
||||
nnpAQXVdu8m3v1YdPUuTg5ksxSOe9HCIlVXGFhxy3iqCVRn+51FRnUI63rMTOm9/
|
||||
LBqzvji02lDUPGqPgXfcCS0ty8FM2flBIXnwb8TDzCaPYhf53+U=
|
||||
=6dw2
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
Add SSH functionality with new `radicle-ssh`
|
||||
|
||||
We borrow code from `thrussh`, refactored to be runtime-less.
|
||||
";
|
||||
|
||||
#[test]
|
||||
fn test_push_header() {
|
||||
let mut commit = Commit::from_str(UNSIGNED).unwrap();
|
||||
|
||||
commit.push_header("other", "e6fe3c97619deb8ab4198620f9a7eb79d98363dd");
|
||||
commit.push_header("gpgsig", SSH_SIGNATURE);
|
||||
commit.push_header("gpgsig", PGP_SIGNATURE);
|
||||
|
||||
assert_eq!(commit.to_string(), SIGNED);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_header() {
|
||||
let commit = Commit::from_str(SIGNED).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
commit
|
||||
.signatures()
|
||||
.map(|sig| sig.to_string())
|
||||
.collect::<Vec<_>>(),
|
||||
vec![SSH_SIGNATURE.to_owned(), PGP_SIGNATURE.to_owned()]
|
||||
);
|
||||
assert_eq!(
|
||||
commit.values("other").collect::<Vec<_>>(),
|
||||
vec![String::from("e6fe3c97619deb8ab4198620f9a7eb79d98363dd")],
|
||||
);
|
||||
assert!(commit.values("unknown").next().is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_conversion() {
|
||||
assert_eq!(Commit::from_str(SIGNED).unwrap().to_string(), SIGNED);
|
||||
assert_eq!(Commit::from_str(UNSIGNED).unwrap().to_string(), UNSIGNED);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
use std::io;
|
||||
|
||||
use git_commit::Commit;
|
||||
use test_helpers::tempdir::WithTmpDir;
|
||||
|
||||
#[test]
|
||||
fn valid_commits() {
|
||||
let radicle_git = format!(
|
||||
"file://{}",
|
||||
git2::Repository::discover(".").unwrap().path().display()
|
||||
);
|
||||
let repo = WithTmpDir::new(|path| {
|
||||
let repo = git2::Repository::clone(&radicle_git, path)
|
||||
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
|
||||
Ok::<_, io::Error>(repo)
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
let mut walk = repo.revwalk().unwrap();
|
||||
walk.push_head().unwrap();
|
||||
|
||||
// take the first 20 commits and make sure we can parse them
|
||||
for oid in walk.take(20) {
|
||||
let oid = oid.unwrap();
|
||||
let commit = Commit::read(&repo, oid);
|
||||
assert!(commit.is_ok(), "Oid: {}, Error: {:?}", oid, commit)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
#[cfg(test)]
|
||||
mod commit;
|
||||
|
||||
#[cfg(test)]
|
||||
mod integration;
|
||||
Reference in New Issue
Block a user