mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
blobimport: write out linknodes
Summary: This makes it quite easy to write out linknodes. Also regenerate linknodes for our test fixtures -- the next commit will bring them in. Reviewed By: jsgf Differential Revision: D6214033 fbshipit-source-id: 3b930fe9eda45a1b7bc6f0b3f81dd8af102061fc
This commit is contained in:
parent
66a5fa4362
commit
a6c5093cc8
@ -15,9 +15,10 @@ use tokio_core::reactor::Core;
|
||||
use blobrepo::BlobChangeset;
|
||||
use futures_ext::{BoxStream, FutureExt, StreamExt};
|
||||
use heads::Heads;
|
||||
use linknodes::Linknodes;
|
||||
use mercurial::{self, RevlogManifest, RevlogRepo};
|
||||
use mercurial::revlog::RevIdx;
|
||||
use mercurial_types::{Changeset, Manifest, NodeHash};
|
||||
use mercurial_types::{Changeset, Manifest, NodeHash, RepoPath};
|
||||
use stats::Timeseries;
|
||||
|
||||
use BlobstoreEntry;
|
||||
@ -40,7 +41,7 @@ where
|
||||
H: Heads<Key = String>,
|
||||
H::Error: Into<Error>,
|
||||
{
|
||||
pub fn convert(self) -> Result<()> {
|
||||
pub fn convert<L: Linknodes>(self, linknodes_store: L) -> Result<()> {
|
||||
let mut core = self.core;
|
||||
let logger_owned = self.logger;
|
||||
let logger = &logger_owned;
|
||||
@ -53,6 +54,7 @@ where
|
||||
} else {
|
||||
self.repo.changesets().boxify()
|
||||
};
|
||||
let linknodes_store = Arc::new(linknodes_store);
|
||||
|
||||
// Generate stream of changesets. For each changeset, save the cs blob, and the manifest
|
||||
// blob, and the files.
|
||||
@ -65,7 +67,7 @@ where
|
||||
move |(seq, csid)| {
|
||||
debug!(logger, "{}: changeset {}", seq, csid);
|
||||
STATS::changesets.add_value(1);
|
||||
copy_changeset(repo.clone(), sender.clone(), csid)
|
||||
copy_changeset(repo.clone(), sender.clone(), linknodes_store.clone(), csid)
|
||||
}
|
||||
}) // Stream<Future<()>>
|
||||
.map(|copy| cpupool.spawn(copy))
|
||||
@ -104,13 +106,15 @@ where
|
||||
/// The files are more complex. For each manifest, we generate a stream of entries, then flatten
|
||||
/// the entry streams from all changesets into a single stream. Then each entry is filtered
|
||||
/// against a set of entries that have already been copied, and any remaining are actually copied.
|
||||
fn copy_changeset(
|
||||
fn copy_changeset<L>(
|
||||
revlog_repo: RevlogRepo,
|
||||
sender: SyncSender<BlobstoreEntry>,
|
||||
linknodes_store: L,
|
||||
csid: NodeHash,
|
||||
) -> impl Future<Item = (), Error = Error> + Send + 'static
|
||||
where
|
||||
Error: Send + 'static,
|
||||
L: Linknodes,
|
||||
{
|
||||
let put = {
|
||||
let sender = sender.clone();
|
||||
@ -134,8 +138,7 @@ where
|
||||
.and_then(move |(cs, entry)| {
|
||||
let mfid = *cs.manifestid();
|
||||
let linkrev = entry.linkrev;
|
||||
|
||||
put_blobs(revlog_repo, sender, mfid, linkrev)
|
||||
put_blobs(revlog_repo, sender, linknodes_store, mfid, linkrev)
|
||||
})
|
||||
.map_err(move |err| {
|
||||
Error::with_chain(err, format!("Can't copy manifest for cs {}", csid))
|
||||
@ -150,16 +153,23 @@ where
|
||||
/// Copy manifest and filelog entries into the blob store.
|
||||
///
|
||||
/// See the help for copy_changeset for a full description.
|
||||
fn put_blobs(
|
||||
fn put_blobs<L>(
|
||||
revlog_repo: RevlogRepo,
|
||||
sender: SyncSender<BlobstoreEntry>,
|
||||
linknodes_store: L,
|
||||
mfid: NodeHash,
|
||||
linkrev: RevIdx,
|
||||
) -> impl Future<Item = (), Error = Error> + Send + 'static {
|
||||
) -> impl Future<Item = (), Error = Error> + Send + 'static
|
||||
where
|
||||
L: Linknodes,
|
||||
{
|
||||
let cs_entry_fut = revlog_repo.get_changelog().get_entry(linkrev).into_future();
|
||||
|
||||
revlog_repo
|
||||
.get_manifest_blob_by_nodeid(&mfid)
|
||||
.join(cs_entry_fut)
|
||||
.from_err()
|
||||
.and_then(move |blob| {
|
||||
.and_then(move |(blob, cs_entry)| {
|
||||
let putmf = manifest::put_entry(
|
||||
sender.clone(),
|
||||
mfid,
|
||||
@ -167,6 +177,11 @@ fn put_blobs(
|
||||
blob.parents().clone(),
|
||||
);
|
||||
|
||||
let linknode = cs_entry.nodeid;
|
||||
let put_root_linknode = linknodes_store
|
||||
.add(RepoPath::root(), &mfid, &linknode)
|
||||
.from_err();
|
||||
|
||||
// Get the listing of entries and fetch each of those
|
||||
let files = RevlogManifest::new(revlog_repo.clone(), blob)
|
||||
.map_err(|err| {
|
||||
@ -186,7 +201,14 @@ fn put_blobs(
|
||||
}
|
||||
})
|
||||
.flatten()
|
||||
.for_each(move |entry| manifest::copy_entry(entry, sender.clone()))
|
||||
.for_each(move |entry| {
|
||||
// All entries share the same linknode to the changelog.
|
||||
let linknode_future = linknodes_store
|
||||
.add(entry.get_path().clone(), entry.get_hash(), &linknode)
|
||||
.from_err();
|
||||
let copy_future = manifest::copy_entry(entry, sender.clone());
|
||||
copy_future.join(linknode_future).map(|_| ())
|
||||
})
|
||||
})
|
||||
.into_future()
|
||||
.flatten();
|
||||
@ -195,7 +217,7 @@ fn put_blobs(
|
||||
// Huh? No idea why this is needed to avoid an error below.
|
||||
let files = files.boxify();
|
||||
|
||||
putmf.join(files).map(|_| ())
|
||||
putmf.join3(put_root_linknode, files).map(|_| ())
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -9,8 +9,10 @@ error_chain! {
|
||||
Blobrepo(::blobrepo::Error, ::blobrepo::ErrorKind);
|
||||
Mercurial(::mercurial::Error, ::mercurial::ErrorKind);
|
||||
Rocksblob(::rocksblob::Error, ::rocksblob::ErrorKind);
|
||||
FileKV(::filekv::Error, ::filekv::ErrorKind);
|
||||
FileHeads(::fileheads::Error, ::fileheads::ErrorKind);
|
||||
Fileblob(::fileblob::Error, ::fileblob::ErrorKind);
|
||||
Linknodes(::linknodes::Error, ::linknodes::ErrorKind);
|
||||
Manifold(::manifoldblob::Error, ::manifoldblob::ErrorKind);
|
||||
}
|
||||
foreign_links {
|
||||
|
@ -27,8 +27,11 @@ extern crate blobrepo;
|
||||
extern crate blobstore;
|
||||
extern crate fileblob;
|
||||
extern crate fileheads;
|
||||
extern crate filekv;
|
||||
extern crate filelinknodes;
|
||||
extern crate futures_ext;
|
||||
extern crate heads;
|
||||
extern crate linknodes;
|
||||
extern crate manifoldblob;
|
||||
extern crate mercurial;
|
||||
extern crate mercurial_types;
|
||||
@ -60,7 +63,9 @@ use blobrepo::BlobChangeset;
|
||||
use blobstore::Blobstore;
|
||||
use fileblob::Fileblob;
|
||||
use fileheads::FileHeads;
|
||||
use filelinknodes::FileLinknodes;
|
||||
use futures_ext::{BoxFuture, FutureExt};
|
||||
use linknodes::NoopLinknodes;
|
||||
use manifoldblob::ManifoldBlob;
|
||||
use mercurial::RevlogRepo;
|
||||
use rocksblob::Rocksblob;
|
||||
@ -111,6 +116,7 @@ fn run_blobimport<In, Out>(
|
||||
input: In,
|
||||
output: Out,
|
||||
blobtype: BlobstoreType,
|
||||
write_linknodes: bool,
|
||||
logger: &Logger,
|
||||
postpone_compaction: bool,
|
||||
channel_size: usize,
|
||||
@ -140,43 +146,46 @@ where
|
||||
// data to this thread.
|
||||
let iothread = thread::Builder::new()
|
||||
.name("iothread".to_owned())
|
||||
.spawn(move || {
|
||||
let receiverstream = stream::iter_ok::<_, ()>(recv);
|
||||
let mut core = Core::new().expect("cannot create core in iothread");
|
||||
let blobstore = open_blobstore(
|
||||
output,
|
||||
blobtype,
|
||||
&core.remote(),
|
||||
postpone_compaction,
|
||||
max_blob_size,
|
||||
)?;
|
||||
// Filter only manifest entries, because changeset entries should be unique
|
||||
let mut inserted_manifest_entries = std::collections::HashSet::new();
|
||||
let stream = receiverstream
|
||||
.map(move |sender_helper| match sender_helper {
|
||||
BlobstoreEntry::Changeset(bcs) => {
|
||||
bcs.save(blobstore.clone()).from_err().boxify()
|
||||
}
|
||||
BlobstoreEntry::ManifestEntry((key, value)) => {
|
||||
if inserted_manifest_entries.insert(key.clone()) {
|
||||
blobstore.put(key.clone(), value).boxify()
|
||||
} else {
|
||||
STATS::duplicates.add_value(1);
|
||||
Ok(()).into_future().boxify()
|
||||
.spawn({
|
||||
let output = output.clone();
|
||||
move || {
|
||||
let receiverstream = stream::iter_ok::<_, ()>(recv);
|
||||
let mut core = Core::new().expect("cannot create core in iothread");
|
||||
let blobstore = open_blobstore(
|
||||
output,
|
||||
blobtype,
|
||||
&core.remote(),
|
||||
postpone_compaction,
|
||||
max_blob_size,
|
||||
)?;
|
||||
// Filter only manifest entries, because changeset entries should be unique
|
||||
let mut inserted_manifest_entries = std::collections::HashSet::new();
|
||||
let stream = receiverstream
|
||||
.map(move |sender_helper| match sender_helper {
|
||||
BlobstoreEntry::Changeset(bcs) => {
|
||||
bcs.save(blobstore.clone()).from_err().boxify()
|
||||
}
|
||||
}
|
||||
})
|
||||
.map_err(|_| Error::from("error happened"))
|
||||
.buffer_unordered(channel_size)
|
||||
.then(move |res| {
|
||||
if res.is_err() {
|
||||
STATS::failures.add_value(1);
|
||||
} else {
|
||||
STATS::successes.add_value(1);
|
||||
}
|
||||
res
|
||||
});
|
||||
core.run(stream.for_each(|_| Ok(())))
|
||||
BlobstoreEntry::ManifestEntry((key, value)) => {
|
||||
if inserted_manifest_entries.insert(key.clone()) {
|
||||
blobstore.put(key.clone(), value).boxify()
|
||||
} else {
|
||||
STATS::duplicates.add_value(1);
|
||||
Ok(()).into_future().boxify()
|
||||
}
|
||||
}
|
||||
})
|
||||
.map_err(|_| Error::from("error happened"))
|
||||
.buffer_unordered(channel_size)
|
||||
.then(move |res| {
|
||||
if res.is_err() {
|
||||
STATS::failures.add_value(1);
|
||||
} else {
|
||||
STATS::successes.add_value(1);
|
||||
}
|
||||
res
|
||||
});
|
||||
core.run(stream.for_each(|_| Ok(())))
|
||||
}
|
||||
})
|
||||
.expect("cannot start iothread");
|
||||
|
||||
@ -188,11 +197,18 @@ where
|
||||
sender,
|
||||
headstore,
|
||||
core,
|
||||
cpupool,
|
||||
cpupool: cpupool.clone(),
|
||||
logger: logger.clone(),
|
||||
commits_limit: commits_limit,
|
||||
};
|
||||
let res = convert_context.convert();
|
||||
let res = if write_linknodes {
|
||||
info!(logger, "Opening linknodes store: {:?}", output);
|
||||
let linknodes_store = open_linknodes_store(&output, &cpupool)?;
|
||||
convert_context.convert(linknodes_store)
|
||||
} else {
|
||||
info!(logger, "--linknodes not specified, not writing linknodes");
|
||||
convert_context.convert(NoopLinknodes::new())
|
||||
};
|
||||
iothread.join().expect("failed to join io thread")?;
|
||||
res
|
||||
}
|
||||
@ -218,6 +234,13 @@ fn open_headstore<P: Into<PathBuf>>(heads: P, pool: &Arc<CpuPool>) -> Result<Fil
|
||||
Ok(headstore)
|
||||
}
|
||||
|
||||
fn open_linknodes_store<P: Into<PathBuf>>(path: P, pool: &Arc<CpuPool>) -> Result<FileLinknodes> {
|
||||
let mut linknodes_path = path.into();
|
||||
linknodes_path.push("linknodes");
|
||||
let linknodes_store = FileLinknodes::create_with_pool(linknodes_path, pool.clone())?;
|
||||
Ok(linknodes_store)
|
||||
}
|
||||
|
||||
fn open_blobstore<P: Into<PathBuf>>(
|
||||
output: P,
|
||||
ty: BlobstoreType,
|
||||
@ -306,6 +329,7 @@ fn setup_app<'a, 'b>() -> App<'a, 'b> {
|
||||
--postpone-compaction '(rocksdb only) postpone auto compaction while importing'
|
||||
|
||||
-d, --debug 'print debug level output'
|
||||
--linknodes 'also generate linknodes'
|
||||
--channel-size [SIZE] 'channel size between worker and io threads. Default: 1000'
|
||||
--commits-limit [LIMIT] 'import only LIMIT first commits from revlog repo'
|
||||
--max-blob-size [LIMIT] 'max size of the blob to be inserted'
|
||||
@ -403,10 +427,13 @@ fn main() {
|
||||
})
|
||||
.unwrap_or(1000);
|
||||
|
||||
let write_linknodes = matches.is_present("linknodes");
|
||||
|
||||
run_blobimport(
|
||||
input,
|
||||
output,
|
||||
blobtype,
|
||||
write_linknodes,
|
||||
&root_log,
|
||||
postpone_compaction,
|
||||
channel_size,
|
||||
@ -420,6 +447,7 @@ fn main() {
|
||||
}),
|
||||
)?;
|
||||
|
||||
|
||||
if matches.value_of("blobstore").unwrap() == "rocksdb" && postpone_compaction {
|
||||
let options = rocksdb::Options::new().create_if_missing(false);
|
||||
let rocksdb = rocksdb::Db::open(Path::new(output).join("blobs"), options)
|
||||
|
@ -18,7 +18,8 @@ extern crate mercurial_types;
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
|
||||
use futures::Future;
|
||||
use futures::{Future, IntoFuture};
|
||||
use futures::future::FutureResult;
|
||||
|
||||
use mercurial_types::{NodeHash, RepoPath};
|
||||
|
||||
@ -83,6 +84,31 @@ pub trait Linknodes: Send + Sync + 'static {
|
||||
fn get(&self, path: RepoPath, node: &NodeHash) -> Self::Get;
|
||||
}
|
||||
|
||||
/// A linknodes implementation that never stores anything.
|
||||
pub struct NoopLinknodes;
|
||||
|
||||
impl NoopLinknodes {
|
||||
#[inline]
|
||||
pub fn new() -> Self {
|
||||
NoopLinknodes
|
||||
}
|
||||
}
|
||||
|
||||
impl Linknodes for NoopLinknodes {
|
||||
type Get = FutureResult<NodeHash, Error>;
|
||||
type Effect = FutureResult<(), Error>;
|
||||
|
||||
#[inline]
|
||||
fn get(&self, path: RepoPath, node: &NodeHash) -> Self::Get {
|
||||
Err(ErrorKind::NotFound(path, *node).into()).into_future()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn add(&self, _path: RepoPath, _node: &NodeHash, _linknode: &NodeHash) -> Self::Effect {
|
||||
Ok(()).into_future()
|
||||
}
|
||||
}
|
||||
|
||||
impl<L> Linknodes for Arc<L>
|
||||
where
|
||||
L: Linknodes,
|
||||
|
@ -169,6 +169,11 @@ impl RevlogRepo {
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn get_changelog(&self) -> &Revlog {
|
||||
&self.changelog
|
||||
}
|
||||
|
||||
pub fn changeset_exists(&self, nodeid: &NodeHash) -> FutureResult<bool> {
|
||||
Ok(self.changelog.get_idx_by_nodeid(nodeid).is_ok()).into_future()
|
||||
}
|
||||
|
BIN
tests/fixtures/branch_even/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-b613b000258568001fc69f0fe495a65d2c5b4aff
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-b613b000258568001fc69f0fe495a65d2c5b4aff
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-e59d9722dbf4acb2912a960c3ea478041891de6a
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-e59d9722dbf4acb2912a960c3ea478041891de6a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_even/linknodes/linknode-ff93ae7722dffbc7cfae7e92c679df5c402405ab
vendored
Normal file
BIN
tests/fixtures/branch_even/linknodes/linknode-ff93ae7722dffbc7cfae7e92c679df5c402405ab
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-0743db0ab93d192d297a5b5e302091c6507e26d8
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-0743db0ab93d192d297a5b5e302091c6507e26d8
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-2584207f352454f1be67227dafc5e50da834604a
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-2584207f352454f1be67227dafc5e50da834604a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-32bf83a929744d02a82d523f23b0b0bcd1f72290
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-32bf83a929744d02a82d523f23b0b0bcd1f72290
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-697a8ab8c3ac4f9b4001f2575ede74abb5fc8141
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-697a8ab8c3ac4f9b4001f2575ede74abb5fc8141
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-7696be05eb2e6797a0637925a6ebb07bd0dac195
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-7696be05eb2e6797a0637925a6ebb07bd0dac195
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-91d70fd3b0b867dec646dcc52321d0f2a33fd477
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-91d70fd3b0b867dec646dcc52321d0f2a33fd477
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-9ee9ae7aba5da3e3e20ba6b494cb1a3216538097
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-9ee9ae7aba5da3e3e20ba6b494cb1a3216538097
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-b613b000258568001fc69f0fe495a65d2c5b4aff
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-b613b000258568001fc69f0fe495a65d2c5b4aff
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-e59d9722dbf4acb2912a960c3ea478041891de6a
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-e59d9722dbf4acb2912a960c3ea478041891de6a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-e76cf0693974507e5fc5dfc8dc171419c84be214
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-e76cf0693974507e5fc5dfc8dc171419c84be214
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-ff0e1cb74a8d54855d21fc999a44da6c24bb92cb
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-ff0e1cb74a8d54855d21fc999a44da6c24bb92cb
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_uneven/linknodes/linknode-ff93ae7722dffbc7cfae7e92c679df5c402405ab
vendored
Normal file
BIN
tests/fixtures/branch_uneven/linknodes/linknode-ff93ae7722dffbc7cfae7e92c679df5c402405ab
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-0540b39bb6298f52b52efb2006d3701adf850e1e
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-0540b39bb6298f52b52efb2006d3701adf850e1e
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-0a7dd96b94fa162c014e545bb9008f94ae676e4a
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-0a7dd96b94fa162c014e545bb9008f94ae676e4a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-2c81f3e95229076a1a1171ca9094d283d097e8ed
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-2c81f3e95229076a1a1171ca9094d283d097e8ed
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-2d1db906a6a136a77a89003f5c0a0851afa2e864
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-2d1db906a6a136a77a89003f5c0a0851afa2e864
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-3c9a92f9790d4eab27fc016260ea4604d02bd977
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-3c9a92f9790d4eab27fc016260ea4604d02bd977
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-44030c7f8754b392ea8715ecdcdf6e21413bd498
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-44030c7f8754b392ea8715ecdcdf6e21413bd498
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-7f90d1634d7a4c6da5d4ddcb1d5a796f83bc7e9b
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-7f90d1634d7a4c6da5d4ddcb1d5a796f83bc7e9b
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-7fe2a730f62bd21aa9587f0965a9bc87caee05d5
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-7fe2a730f62bd21aa9587f0965a9bc87caee05d5
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-9be47401ec4626899098fc54cb015a35497be018
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-9be47401ec4626899098fc54cb015a35497be018
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-a3fd23a8a7461ac0372727a2c2b7d9495aeba60e
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-a3fd23a8a7461ac0372727a2c2b7d9495aeba60e
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-b6327fa9ecd226cb3ec5afa25e1c8d3d4419953c
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-b6327fa9ecd226cb3ec5afa25e1c8d3d4419953c
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-b938a5ab97ac335d1f57b19e8403e3242b3922fa
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-b938a5ab97ac335d1f57b19e8403e3242b3922fa
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/branch_wide/linknodes/linknode-ce61a7da31c2f15270ff23ac1c899a03886aecb7
vendored
Normal file
BIN
tests/fixtures/branch_wide/linknodes/linknode-ce61a7da31c2f15270ff23ac1c899a03886aecb7
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-2327f7433f97b24f2f26a112ad7041efec4ecf8a
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-2327f7433f97b24f2f26a112ad7041efec4ecf8a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-30f1d54769cb6cdf93f03d8579a846f681814ac3
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-30f1d54769cb6cdf93f03d8579a846f681814ac3
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-32bf83a929744d02a82d523f23b0b0bcd1f72290
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-32bf83a929744d02a82d523f23b0b0bcd1f72290
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-359939b082f070ec61f156c4d51edf71306379f8
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-359939b082f070ec61f156c4d51edf71306379f8
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-37f52bba4c674db31247b32714034b07bbe31553
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-37f52bba4c674db31247b32714034b07bbe31553
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-3bce81e167a74f3bc995adb415d57d14ccd2d98d
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-3bce81e167a74f3bc995adb415d57d14ccd2d98d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-3ff9dbde89e7974e0c60a09b9c725fbe22f078d1
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-3ff9dbde89e7974e0c60a09b9c725fbe22f078d1
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-4ec3385f739dbbcdd8c13173ddeb49233453d57d
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-4ec3385f739dbbcdd8c13173ddeb49233453d57d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-4f8b760218c4fb6ab4bb2e1e83ced912d1648c8f
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-4f8b760218c4fb6ab4bb2e1e83ced912d1648c8f
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-6223e54221a3adca386de9038cfc8e7803dbfb75
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-6223e54221a3adca386de9038cfc8e7803dbfb75
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-91d70fd3b0b867dec646dcc52321d0f2a33fd477
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-91d70fd3b0b867dec646dcc52321d0f2a33fd477
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-9eb20ab1608f2e3e0f7db760c1467f1f863527db
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-9eb20ab1608f2e3e0f7db760c1467f1f863527db
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-9ee9ae7aba5da3e3e20ba6b494cb1a3216538097
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-9ee9ae7aba5da3e3e20ba6b494cb1a3216538097
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-a0684d604a52e82aa9c768643222be02c2584439
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-a0684d604a52e82aa9c768643222be02c2584439
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-a45e6aa1f66617aad453ce2758ce7a5065698791
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-a45e6aa1f66617aad453ce2758ce7a5065698791
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-a622abea7b05c2d16f55f0043d8d76a475a3fd5a
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-a622abea7b05c2d16f55f0043d8d76a475a3fd5a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-a6afe03a0f61a11a3d06481a72775ab0d876354d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-ad3ef966192408be4f7525bc7614556e95baa41c
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-ad3ef966192408be4f7525bc7614556e95baa41c
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-b40b8b1f043b3122977a627770ae4e7da83dcb22
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-b40b8b1f043b3122977a627770ae4e7da83dcb22
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-b9a64456662783dfe6ad10c49b85ca9af7f26500
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-b9a64456662783dfe6ad10c49b85ca9af7f26500
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-bc15bc52226e3e3a7032e2b0eccc3f06a9983085
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-bc15bc52226e3e3a7032e2b0eccc3f06a9983085
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-bc83ea65a514cde484a6df765cd5f612e7244a74
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-bc83ea65a514cde484a6df765cd5f612e7244a74
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-d298590227860c60b62f3ea3a7f749449077cb3e
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-d298590227860c60b62f3ea3a7f749449077cb3e
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-dca68d986c5c8d11033e63d9bc666d347103d7c8
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-dca68d986c5c8d11033e63d9bc666d347103d7c8
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-dced267c5c496820030ddc5881dc8adb6928894a
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-dced267c5c496820030ddc5881dc8adb6928894a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-dd6d335680acc0c1af8f8f7a6d69fd4427ed597b
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-dd6d335680acc0c1af8f8f7a6d69fd4427ed597b
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-e6ce3dd6db26f624d24facfcca8553f2b7cf07ce
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-e6ce3dd6db26f624d24facfcca8553f2b7cf07ce
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-fa154fd71f89d8d71b7a646b19ef671261ae9d0d
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-fa154fd71f89d8d71b7a646b19ef671261ae9d0d
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-ff0e1cb74a8d54855d21fc999a44da6c24bb92cb
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-ff0e1cb74a8d54855d21fc999a44da6c24bb92cb
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/linear/linknodes/linknode-fff0ba4d9b5368680be9c8ee4fa6ce9e01fafea1
vendored
Normal file
BIN
tests/fixtures/linear/linknodes/linknode-fff0ba4d9b5368680be9c8ee4fa6ce9e01fafea1
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-01502bebc3645fbd1fa7d77908c24a00d846f640
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-1b6d1c3332e8c47421745ee1fa0da5deb9762c12
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-2011731cad4d4f3e541e65a9a3deea8e15f6a352
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-222a720edcf3a6acc8b7c575f82b991b08fe1f44
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-50eecd9008520222331b2a0b7350d84d4972a328
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-5417b0d5e0d217f9b2d2b521abb1d7fafe8053cf
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-6b7ad4a335045ef1fff626a61cac5d7830beb63a
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-717d22a3197c4f45b1a24b2d0c66ce842f44665e
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-717d22a3197c4f45b1a24b2d0c66ce842f44665e
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-8c6d2ed67d776df6440acba3545fe368099554db
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-95cb38f6e09da3870b8115ccb9615c34da97234c
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-99b8afeb064e64aa30ac3f75b8fb4ca7ac2e9c3b
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-99b8afeb064e64aa30ac3f75b8fb4ca7ac2e9c3b
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-9acbb090ec8ac66c78f6e96f35e77130d2e567ce
vendored
Normal file
Binary file not shown.
BIN
tests/fixtures/merge_even/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
BIN
tests/fixtures/merge_even/linknodes/linknode-b43d177f6dac2428875a27d9676709e3905f8cd0
vendored
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user