##// END OF EJS Templates
sha1dc: import latest version from github...
sha1dc: import latest version from github After the recent SHA1 news, the attacks are serious enough we should be more proactive. This code will at least allow detection of attacks early. It's already widely deployed in Git. This is git revision 855827c583bc30645ba427885caa40c5b81764d2 of the sha1collisiondetection repo[0], with most of the files omitted. A follow-up change will introduce Python bindings for this code. 0: https://github.com/cr-marcstevens/sha1collisiondetection Differential Revision: https://phab.mercurial-scm.org/D7814

File last commit:

r41277:168041fa default
r44509:7dddc225 default
Show More
testing.rs
72 lines | 1.7 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust: factorized testing Graphs...
r41277 // testing.rs
//
// Copyright 2018 Georges Racinet <georges.racinet@octobus.net>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
use crate::{Graph, GraphError, Revision, NULL_REVISION};
/// A stub `Graph`, same as the one from `test-ancestor.py`
///
/// o 13
/// |
/// | o 12
/// | |
/// | | o 11
/// | | |\
/// | | | | o 10
/// | | | | |
/// | o---+ | 9
/// | | | | |
/// o | | | | 8
/// / / / /
/// | | o | 7
/// | | | |
/// o---+ | 6
/// / / /
/// | | o 5
/// | |/
/// | o 4
/// | |
/// o | 3
/// | |
/// | o 2
/// |/
/// o 1
/// |
/// o 0
#[derive(Clone, Debug)]
pub struct SampleGraph;
impl Graph for SampleGraph {
fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
match rev {
0 => Ok([NULL_REVISION, NULL_REVISION]),
1 => Ok([0, NULL_REVISION]),
2 => Ok([1, NULL_REVISION]),
3 => Ok([1, NULL_REVISION]),
4 => Ok([2, NULL_REVISION]),
5 => Ok([4, NULL_REVISION]),
6 => Ok([4, NULL_REVISION]),
7 => Ok([4, NULL_REVISION]),
8 => Ok([NULL_REVISION, NULL_REVISION]),
9 => Ok([6, 7]),
10 => Ok([5, NULL_REVISION]),
11 => Ok([3, 7]),
12 => Ok([9, NULL_REVISION]),
13 => Ok([8, NULL_REVISION]),
r => Err(GraphError::ParentOutOfRange(r)),
}
}
}
// A Graph represented by a vector whose indices are revisions
// and values are parents of the revisions
pub type VecGraph = Vec<[Revision; 2]>;
impl Graph for VecGraph {
fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
Ok(self[rev as usize])
}
}