This is just the first pass at ensuring we can read commit-graph files correctly. It does not support anything interesting like reachability, merge-base, or ahead-behind queries.
Showing the changes to git-commitgraph/tests (43 of 53 files). Show all
Unified · Split
| @@ -0,0 +1,4 @@ | ||
| 1 | +mod octopus_merges; | |
| 2 | +mod single_commit; | |
| 3 | +mod single_parent; | |
| 4 | +mod two_parents; | |
| @@ -0,0 +1,140 @@ | ||
| 1 | +use crate::{fixture_path, hex_to_id}; | |
| 2 | +use git_commitgraph::{Graph, GraphPosition}; | |
| 3 | + | |
| 4 | +const ROOT: &[u8] = b"09e3185550fdb352031df65f0e81e74df3b9a556"; | |
| 5 | +const ROOT_INDEX: GraphPosition = GraphPosition(0); | |
| 6 | +const COMMIT1: &[u8] = b"33316871b4ab988ea87ba60aaf0138ddb4fb0d21"; | |
| 7 | +const COMMIT1_INDEX: GraphPosition = GraphPosition(2); | |
| 8 | +const COMMIT2: &[u8] = b"cbfe147d1826a0d2701f7c80dbe0e2cfba385b15"; | |
| 9 | +const COMMIT2_INDEX: GraphPosition = GraphPosition(6); | |
| 10 | +const COMMIT3: &[u8] = b"9dab5d610702ceca4bd889a5ef2662cacfd53178"; | |
| 11 | +const COMMIT3_INDEX: GraphPosition = GraphPosition(5); | |
| 12 | +const COMMIT4: &[u8] = b"2ec748404455c0b0451b186851a815da13918ebb"; | |
| 13 | +const COMMIT4_INDEX: GraphPosition = GraphPosition(1); | |
| 14 | +const THREE_PARENTS: &[u8] = b"7070cd0b59cd46a0f0fa0c50ca9148390ae1e7c7"; | |
| 15 | +const THREE_PARENTS_INDEX: GraphPosition = GraphPosition(4); | |
| 16 | +const FOUR_PARENTS: &[u8] = b"5ca46a72d91817add3a7218f3eaf8b2b6c1caa13"; | |
| 17 | +const FOUR_PARENTS_INDEX: GraphPosition = GraphPosition(3); | |
| 18 | + | |
| 19 | +#[test] | |
| 20 | +fn v1() -> Result<(), Box<dyn std::error::Error>> { | |
| 21 | + let root_id = hex_to_id(ROOT); | |
| 22 | + let commit1_id = hex_to_id(COMMIT1); | |
| 23 | + let commit2_id = hex_to_id(COMMIT2); | |
| 24 | + let commit3_id = hex_to_id(COMMIT3); | |
| 25 | + let commit4_id = hex_to_id(COMMIT4); | |
| 26 | + let three_parents_id = hex_to_id(THREE_PARENTS); | |
| 27 | + let four_parents_id = hex_to_id(FOUR_PARENTS); | |
| 28 | + | |
| 29 | + let cg = Graph::from_object_dir(fixture_path("v1/octopus_merges"))?; | |
| 30 | + assert_eq!(cg.num_commits(), 7); | |
| 31 | + assert_eq!(cg.id_at(ROOT_INDEX), root_id.to_borrowed()); | |
| 32 | + assert_eq!(cg.id_at(COMMIT1_INDEX), commit1_id.to_borrowed()); | |
| 33 | + assert_eq!(cg.id_at(COMMIT2_INDEX), commit2_id.to_borrowed()); | |
| 34 | + assert_eq!(cg.id_at(COMMIT3_INDEX), commit3_id.to_borrowed()); | |
| 35 | + assert_eq!(cg.id_at(COMMIT4_INDEX), commit4_id.to_borrowed()); | |
| 36 | + assert_eq!(cg.id_at(THREE_PARENTS_INDEX), three_parents_id.to_borrowed()); | |
| 37 | + assert_eq!(cg.id_at(FOUR_PARENTS_INDEX), four_parents_id.to_borrowed()); | |
| 38 | + assert_eq!( | |
| 39 | + cg.iter_ids().collect::<Vec<_>>(), | |
| 40 | + vec![ | |
| 41 | + root_id.to_borrowed(), | |
| 42 | + commit4_id.to_borrowed(), | |
| 43 | + commit1_id.to_borrowed(), | |
| 44 | + four_parents_id.to_borrowed(), | |
| 45 | + three_parents_id.to_borrowed(), | |
| 46 | + commit3_id.to_borrowed(), | |
| 47 | + commit2_id.to_borrowed(), | |
| 48 | + ] | |
| 49 | + ); | |
| 50 | + | |
| 51 | + let root = cg.commit_at(ROOT_INDEX); | |
| 52 | + assert_eq!(root.generation(), 1); | |
| 53 | + assert_eq!(root.id(), root_id.to_borrowed()); | |
| 54 | + assert_eq!(root.parent1()?, None); | |
| 55 | + assert_eq!( | |
| 56 | + root.root_tree_id(), | |
| 57 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 58 | + ); | |
| 59 | + assert_eq!(root.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, vec![]); | |
| 60 | + | |
| 61 | + let commit1 = cg.commit_at(COMMIT1_INDEX); | |
| 62 | + assert_eq!(commit1.generation(), 2); | |
| 63 | + assert_eq!(commit1.id(), commit1_id.to_borrowed()); | |
| 64 | + assert_eq!(commit1.parent1()?, Some(ROOT_INDEX)); | |
| 65 | + assert_eq!( | |
| 66 | + commit1.root_tree_id(), | |
| 67 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 68 | + ); | |
| 69 | + assert_eq!( | |
| 70 | + commit1.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 71 | + vec![ROOT_INDEX], | |
| 72 | + ); | |
| 73 | + | |
| 74 | + let commit2 = cg.commit_at(COMMIT2_INDEX); | |
| 75 | + assert_eq!(commit2.generation(), 2); | |
| 76 | + assert_eq!(commit2.id(), commit2_id.to_borrowed()); | |
| 77 | + assert_eq!(commit2.parent1()?, Some(ROOT_INDEX)); | |
| 78 | + assert_eq!( | |
| 79 | + commit2.root_tree_id(), | |
| 80 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 81 | + ); | |
| 82 | + assert_eq!( | |
| 83 | + commit2.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 84 | + vec![ROOT_INDEX], | |
| 85 | + ); | |
| 86 | + | |
| 87 | + let commit3 = cg.commit_at(COMMIT3_INDEX); | |
| 88 | + assert_eq!(commit3.generation(), 2); | |
| 89 | + assert_eq!(commit3.id(), commit3_id.to_borrowed()); | |
| 90 | + assert_eq!(commit3.parent1()?, Some(ROOT_INDEX)); | |
| 91 | + assert_eq!( | |
| 92 | + commit3.root_tree_id(), | |
| 93 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 94 | + ); | |
| 95 | + assert_eq!( | |
| 96 | + commit3.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 97 | + vec![ROOT_INDEX], | |
| 98 | + ); | |
| 99 | + | |
| 100 | + let commit4 = cg.commit_at(COMMIT4_INDEX); | |
| 101 | + assert_eq!(commit4.generation(), 2); | |
| 102 | + assert_eq!(commit4.id(), commit4_id.to_borrowed()); | |
| 103 | + assert_eq!(commit4.parent1()?, Some(ROOT_INDEX)); | |
| 104 | + assert_eq!( | |
| 105 | + commit4.root_tree_id(), | |
| 106 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 107 | + ); | |
| 108 | + assert_eq!( | |
| 109 | + commit4.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 110 | + vec![ROOT_INDEX], | |
| 111 | + ); | |
| 112 | + | |
| 113 | + let three_parents = cg.commit_at(THREE_PARENTS_INDEX); | |
| 114 | + assert_eq!(three_parents.generation(), 3); | |
| 115 | + assert_eq!(three_parents.id(), three_parents_id.to_borrowed()); | |
| 116 | + assert_eq!(three_parents.parent1()?, Some(COMMIT1_INDEX)); | |
| 117 | + assert_eq!( | |
| 118 | + three_parents.root_tree_id(), | |
| 119 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 120 | + ); | |
| 121 | + assert_eq!( | |
| 122 | + three_parents.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 123 | + vec![COMMIT1_INDEX, COMMIT2_INDEX, COMMIT3_INDEX], | |
| 124 | + ); | |
| 125 | + | |
| 126 | + let four_parents = cg.commit_at(FOUR_PARENTS_INDEX); | |
| 127 | + assert_eq!(four_parents.generation(), 3); | |
| 128 | + assert_eq!(four_parents.id(), four_parents_id.to_borrowed()); | |
| 129 | + assert_eq!(four_parents.parent1()?, Some(COMMIT2_INDEX)); | |
| 130 | + assert_eq!( | |
| 131 | + four_parents.root_tree_id(), | |
| 132 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 133 | + ); | |
| 134 | + assert_eq!( | |
| 135 | + four_parents.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 136 | + vec![COMMIT2_INDEX, COMMIT1_INDEX, COMMIT3_INDEX, COMMIT4_INDEX], | |
| 137 | + ); | |
| 138 | + | |
| 139 | + Ok(()) | |
| 140 | +} | |
| @@ -0,0 +1,26 @@ | ||
| 1 | +use crate::{fixture_path, hex_to_id}; | |
| 2 | +use git_commitgraph::{Graph, GraphPosition}; | |
| 3 | + | |
| 4 | +const COMMIT: &[u8] = b"771fa42310bb3d221f4cf82613a491b0957d2003"; | |
| 5 | + | |
| 6 | +#[test] | |
| 7 | +fn v1() -> Result<(), Box<dyn std::error::Error>> { | |
| 8 | + let commit_id = hex_to_id(COMMIT); | |
| 9 | + | |
| 10 | + let cg = Graph::from_object_dir(fixture_path("v1/single_commit"))?; | |
| 11 | + assert_eq!(cg.num_commits(), 1); | |
| 12 | + assert_eq!(cg.id_at(GraphPosition(0)), commit_id.to_borrowed()); | |
| 13 | + assert_eq!(cg.iter_ids().collect::<Vec<_>>(), vec![commit_id.to_borrowed()]); | |
| 14 | + | |
| 15 | + let commit = cg.commit_at(GraphPosition(0)); | |
| 16 | + assert_eq!(commit.generation(), 1); | |
| 17 | + assert_eq!(commit.id(), commit_id.to_borrowed()); | |
| 18 | + assert_eq!(commit.parent1()?, None); | |
| 19 | + assert_eq!( | |
| 20 | + commit.root_tree_id(), | |
| 21 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 22 | + ); | |
| 23 | + assert_eq!(commit.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, vec![]); | |
| 24 | + | |
| 25 | + Ok(()) | |
| 26 | +} | |
| @@ -0,0 +1,44 @@ | ||
| 1 | +use crate::{fixture_path, hex_to_id}; | |
| 2 | +use git_commitgraph::{Graph, GraphPosition}; | |
| 3 | + | |
| 4 | +const PARENT: &[u8] = b"ddbbe1220676705c5b7a6bb7047e0d63b58cfc28"; | |
| 5 | +const CHILD: &[u8] = b"91bfe17bfdfef01c4c38e34e577b01a14a1ef2d4"; | |
| 6 | + | |
| 7 | +#[test] | |
| 8 | +fn v1() -> Result<(), Box<dyn std::error::Error>> { | |
| 9 | + let parent_id = hex_to_id(PARENT); | |
| 10 | + let child_id = hex_to_id(CHILD); | |
| 11 | + | |
| 12 | + let cg = Graph::from_object_dir(fixture_path("v1/single_parent"))?; | |
| 13 | + assert_eq!(cg.num_commits(), 2); | |
| 14 | + assert_eq!(cg.id_at(GraphPosition(0)), child_id.to_borrowed()); | |
| 15 | + assert_eq!( | |
| 16 | + cg.iter_ids().collect::<Vec<_>>(), | |
| 17 | + vec![child_id.to_borrowed(), parent_id.to_borrowed()] | |
| 18 | + ); | |
| 19 | + | |
| 20 | + let parent = cg.commit_at(GraphPosition(1)); | |
| 21 | + assert_eq!(parent.generation(), 1); | |
| 22 | + assert_eq!(parent.id(), parent_id.to_borrowed()); | |
| 23 | + assert_eq!(parent.parent1()?, None); | |
| 24 | + assert_eq!( | |
| 25 | + parent.root_tree_id(), | |
| 26 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 27 | + ); | |
| 28 | + assert_eq!(parent.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, vec![]); | |
| 29 | + | |
| 30 | + let child = cg.commit_at(GraphPosition(0)); | |
| 31 | + assert_eq!(child.generation(), 2); | |
| 32 | + assert_eq!(child.id(), child_id.to_borrowed()); | |
| 33 | + assert_eq!(child.parent1()?, Some(GraphPosition(1))); | |
| 34 | + assert_eq!( | |
| 35 | + child.root_tree_id(), | |
| 36 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 37 | + ); | |
| 38 | + assert_eq!( | |
| 39 | + child.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 40 | + vec![GraphPosition(1)] | |
| 41 | + ); | |
| 42 | + | |
| 43 | + Ok(()) | |
| 44 | +} | |
| @@ -0,0 +1,65 @@ | ||
| 1 | +use crate::{fixture_path, hex_to_id}; | |
| 2 | +use git_commitgraph::{Graph, GraphPosition}; | |
| 3 | + | |
| 4 | +const PARENT1: &[u8] = b"7506a95b8062f0bee6ccdee717021a0c710a1959"; | |
| 5 | +const PARENT1_INDEX: GraphPosition = GraphPosition(2); | |
| 6 | +const PARENT2: &[u8] = b"12ae061ac737392973e59d5df2103a72f1088e45"; | |
| 7 | +const PARENT2_INDEX: GraphPosition = GraphPosition(0); | |
| 8 | +const MERGE: &[u8] = b"6a23d4bb5ef62fff1b57b898240bf5a9d5813800"; | |
| 9 | +const MERGE_INDEX: GraphPosition = GraphPosition(1); | |
| 10 | + | |
| 11 | +#[test] | |
| 12 | +fn v1() -> Result<(), Box<dyn std::error::Error>> { | |
| 13 | + let parent1_id = hex_to_id(PARENT1); | |
| 14 | + let parent2_id = hex_to_id(PARENT2); | |
| 15 | + let merge_id = hex_to_id(MERGE); | |
| 16 | + | |
| 17 | + let cg = Graph::from_object_dir(fixture_path("v1/two_parents"))?; | |
| 18 | + assert_eq!(cg.num_commits(), 3); | |
| 19 | + assert_eq!(cg.id_at(PARENT1_INDEX), parent1_id.to_borrowed()); | |
| 20 | + assert_eq!(cg.id_at(PARENT2_INDEX), parent2_id.to_borrowed()); | |
| 21 | + assert_eq!(cg.id_at(MERGE_INDEX), merge_id.to_borrowed()); | |
| 22 | + assert_eq!( | |
| 23 | + cg.iter_ids().collect::<Vec<_>>(), | |
| 24 | + vec![ | |
| 25 | + parent2_id.to_borrowed(), | |
| 26 | + merge_id.to_borrowed(), | |
| 27 | + parent1_id.to_borrowed() | |
| 28 | + ] | |
| 29 | + ); | |
| 30 | + | |
| 31 | + let parent1 = cg.commit_at(PARENT1_INDEX); | |
| 32 | + assert_eq!(parent1.generation(), 1); | |
| 33 | + assert_eq!(parent1.id(), parent1_id.to_borrowed()); | |
| 34 | + assert_eq!(parent1.parent1()?, None); | |
| 35 | + assert_eq!( | |
| 36 | + parent1.root_tree_id(), | |
| 37 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 38 | + ); | |
| 39 | + assert_eq!(parent1.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, vec![]); | |
| 40 | + | |
| 41 | + let parent2 = cg.commit_at(PARENT2_INDEX); | |
| 42 | + assert_eq!(parent2.generation(), 1); | |
| 43 | + assert_eq!(parent2.id(), parent2_id.to_borrowed()); | |
| 44 | + assert_eq!(parent2.parent1()?, None); | |
| 45 | + assert_eq!( | |
| 46 | + parent2.root_tree_id(), | |
| 47 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 48 | + ); | |
| 49 | + assert_eq!(parent2.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, vec![]); | |
| 50 | + | |
| 51 | + let merge = cg.commit_at(MERGE_INDEX); | |
| 52 | + assert_eq!(merge.generation(), 2); | |
| 53 | + assert_eq!(merge.id(), merge_id.to_borrowed()); | |
| 54 | + assert_eq!(merge.parent1()?, Some(PARENT1_INDEX)); | |
| 55 | + assert_eq!( | |
| 56 | + merge.root_tree_id(), | |
| 57 | + hex_to_id(b"4b825dc642cb6eb9a060e54bf8d69288fbee4904").to_borrowed(), | |
| 58 | + ); | |
| 59 | + assert_eq!( | |
| 60 | + merge.iter_parent_indices().collect::<Result<Vec<_>, _>>()?, | |
| 61 | + vec![PARENT1_INDEX, PARENT2_INDEX] | |
| 62 | + ); | |
| 63 | + | |
| 64 | + Ok(()) | |
| 65 | +} | |
| @@ -0,0 +1,12 @@ | ||
| 1 | +use git_object::owned; | |
| 2 | +use std::path::PathBuf; | |
| 3 | + | |
| 4 | +mod access; | |
| 5 | + | |
| 6 | +pub fn fixture_path(path: &str) -> PathBuf { | |
| 7 | + PathBuf::from("tests").join("fixtures").join(path) | |
| 8 | +} | |
| 9 | + | |
| 10 | +pub fn hex_to_id(hex: &[u8]) -> owned::Id { | |
| 11 | + owned::Id::from_40_bytes_in_hex(hex).expect("40 bytes hex") | |
| 12 | +} | |
| @@ -0,0 +1,34 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +parent_dir="$1" | |
| 5 | +mkdir "$parent_dir" | |
| 6 | + | |
| 7 | +script_dir=$(dirname "$(realpath -e "$0")") | |
| 8 | + | |
| 9 | +run() { | |
| 10 | + local target_dir=$parent_dir/$1 | |
| 11 | + local script=$script_dir/$1.sh | |
| 12 | + | |
| 13 | + local temp_dir=$(mktemp -d create_fixtures-XXXXXXXXXX) | |
| 14 | + trap "rm -rf $temp_dir" EXIT | |
| 15 | + "$script" "$temp_dir" | |
| 16 | + cp -dR "$temp_dir/.git/objects/" "$target_dir/" | |
| 17 | + rm -rf "$temp_dir" | |
| 18 | + trap - EXIT | |
| 19 | +} | |
| 20 | + | |
| 21 | +run bloom | |
| 22 | +run bloom_too_large | |
| 23 | +run octopus_merges | |
| 24 | +run single_commit | |
| 25 | +run single_parent | |
| 26 | +run split_chain | |
| 27 | +run two_parents | |
| 28 | + | |
| 29 | +#"$script_dir"/bloom.sh "$parent_dir/bloom" | |
| 30 | +#"$script_dir"/bloom_too_large.sh "$parent_dir/bloom_to_large" | |
| 31 | +#"$script_dir"/octopus_merges.sh "$parent_dir/octopus_merges" | |
| 32 | +#"$script_dir"/single_commit.sh "$parent_dir/single_commit" | |
| 33 | +#"$script_dir"/single_parent.sh "$parent_dir/single_parent" | |
| 34 | +#"$script_dir"/two_parents.sh "$parent_dir/two_parents" | |
| @@ -0,0 +1,37 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +export GIT_AUTHOR_DATE="2000-01-01 00:00:00 +0000" | |
| 5 | +export GIT_AUTHOR_EMAIL=author@example.com | |
| 6 | +export GIT_AUTHOR_NAME=author | |
| 7 | +export GIT_COMMITTER_DATE="2000-01-02 00:00:00 +0000" | |
| 8 | +export GIT_COMMITTER_EMAIL=committer@example.com | |
| 9 | +export GIT_COMMITTER_NAME=committer | |
| 10 | + | |
| 11 | +mkdir -p "$1" | |
| 12 | +cd "$1" | |
| 13 | +git init -q | |
| 14 | + | |
| 15 | +git checkout -q --orphan root | |
| 16 | +git commit -q --allow-empty -m root | |
| 17 | + | |
| 18 | +git checkout -q -b commit1 root | |
| 19 | +git commit -q --allow-empty -m commit1 | |
| 20 | + | |
| 21 | +git checkout -q -b commit2 root | |
| 22 | +git commit -q --allow-empty -m commit2 | |
| 23 | + | |
| 24 | +git checkout -q -b commit3 root | |
| 25 | +git commit -q --allow-empty -m commit3 | |
| 26 | + | |
| 27 | +git checkout -q -b commit4 root | |
| 28 | +git commit -q --allow-empty -m commit4 | |
| 29 | + | |
| 30 | +git checkout -q -b three_parents commit1 | |
| 31 | +git merge -q -m three_parents --no-ff commit2 commit3 >/dev/null | |
| 32 | + | |
| 33 | +git checkout -q -b four_parents commit2 | |
| 34 | +git merge -q -m four_parents --no-ff commit1 commit3 commit4 >/dev/null | |
| 35 | + | |
| 36 | +git commit-graph write --no-progress --reachable | |
| 37 | +git repack -adq | |
| @@ -0,0 +1,21 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +# The goal with this repo is to have the smallest commit-graph file possible, in the hopes that an | |
| 5 | +# off-by-one error | |
| 6 | +export GIT_AUTHOR_DATE="2000-01-01 00:00:00 +0000" | |
| 7 | +export GIT_AUTHOR_EMAIL=author@example.com | |
| 8 | +export GIT_AUTHOR_NAME=author | |
| 9 | +export GIT_COMMITTER_DATE="2000-01-02 00:00:00 +0000" | |
| 10 | +export GIT_COMMITTER_EMAIL=committer@example.com | |
| 11 | +export GIT_COMMITTER_NAME=committer | |
| 12 | + | |
| 13 | +mkdir -p "$1" | |
| 14 | +cd "$1" | |
| 15 | +git init -q | |
| 16 | + | |
| 17 | +git checkout -q -b commit | |
| 18 | +git commit -q --allow-empty -m commit | |
| 19 | + | |
| 20 | +git commit-graph write --no-progress --reachable | |
| 21 | +git repack -adq | |
| @@ -0,0 +1,22 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +export GIT_AUTHOR_DATE="2000-01-01 00:00:00 +0000" | |
| 5 | +export GIT_AUTHOR_EMAIL=author@example.com | |
| 6 | +export GIT_AUTHOR_NAME=author | |
| 7 | +export GIT_COMMITTER_DATE="2000-01-02 00:00:00 +0000" | |
| 8 | +export GIT_COMMITTER_EMAIL=committer@example.com | |
| 9 | +export GIT_COMMITTER_NAME=committer | |
| 10 | + | |
| 11 | +mkdir -p "$1" | |
| 12 | +cd "$1" | |
| 13 | +git init -q | |
| 14 | + | |
| 15 | +git checkout -q -b parent | |
| 16 | +git commit -q --allow-empty -m parent | |
| 17 | + | |
| 18 | +git checkout -q -b child parent | |
| 19 | +git commit -q --allow-empty -m child | |
| 20 | + | |
| 21 | +git commit-graph write --no-progress --reachable | |
| 22 | +git repack -adq | |
| @@ -0,0 +1,25 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +export GIT_AUTHOR_DATE="2000-01-01 00:00:00 +0000" | |
| 5 | +export GIT_AUTHOR_EMAIL=author@example.com | |
| 6 | +export GIT_AUTHOR_NAME=author | |
| 7 | +export GIT_COMMITTER_DATE="2000-01-02 00:00:00 +0000" | |
| 8 | +export GIT_COMMITTER_EMAIL=committer@example.com | |
| 9 | +export GIT_COMMITTER_NAME=committer | |
| 10 | + | |
| 11 | +mkdir -p "$1" | |
| 12 | +cd "$1" | |
| 13 | +git init -q | |
| 14 | + | |
| 15 | +git checkout -q -b commit1 | |
| 16 | +git commit -q --allow-empty -m commit1 | |
| 17 | +git checkout -q -b commit2 commit1 | |
| 18 | +git commit -q --allow-empty -m commit2 | |
| 19 | +git checkout -q -b commit3 commit2 | |
| 20 | +git commit -q --allow-empty -m commit3 | |
| 21 | + | |
| 22 | +git show-ref -s commit1 | git commit-graph write --no-progress --split=no-merge --stdin-commits | |
| 23 | +git show-ref -s commit2 | git commit-graph write --no-progress --split=no-merge --stdin-commits | |
| 24 | +git show-ref -s commit3 | git commit-graph write --no-progress --split=no-merge --stdin-commits | |
| 25 | +git repack -adq | |
| @@ -0,0 +1,25 @@ | ||
| 1 | +#!/bin/bash | |
| 2 | +set -eu -o pipefail | |
| 3 | + | |
| 4 | +export GIT_AUTHOR_DATE="2000-01-01 00:00:00 +0000" | |
| 5 | +export GIT_AUTHOR_EMAIL=author@example.com | |
| 6 | +export GIT_AUTHOR_NAME=author | |
| 7 | +export GIT_COMMITTER_DATE="2000-01-02 00:00:00 +0000" | |
| 8 | +export GIT_COMMITTER_EMAIL=committer@example.com | |
| 9 | +export GIT_COMMITTER_NAME=committer | |
| 10 | + | |
| 11 | +mkdir -p "$1" | |
| 12 | +cd "$1" | |
| 13 | +git init -q | |
| 14 | + | |
| 15 | +git checkout -q --orphan parent1 | |
| 16 | +git commit -q --allow-empty -m parent1 | |
| 17 | + | |
| 18 | +git checkout -q --orphan parent2 | |
| 19 | +git commit -q --allow-empty -m parent2 | |
| 20 | + | |
| 21 | +git checkout -q -b merge parent1 | |
| 22 | +git merge -q --allow-unrelated-histories --no-ff -m merge parent2 >/dev/null | |
| 23 | + | |
| 24 | +git commit-graph write --no-progress --reachable | |
| 25 | +git repack -adq | |
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-317d17c824d1a0b6991949219f7b6ba9ad51c3e6.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-b7a28066d2c1e9511d1a60349d0d6e3bf803d1b6.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-976438ba1bde7d9c944d8681cbfad266feec7068.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-07779428eae7661b1471110dda1efc99e3e954e7.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-ba89c2e6239315806e37d189aebf4a582e96a6d5.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,3 @@ | ||
| 1 | +ca9f15bcd6129d304e0f4d4c8c6545467dcc78e1 | |
| 2 | +422d4c835a8a22a401b80f8a76f0fa0be550db1b | |
| 3 | +eda6e3e68ac22be2ae8191ed2c80113e7f0344c6 | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-35e0a0e2cb2913c7990d1c6a6aa4747d9b3b5306.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,2 @@ | ||
| 1 | +P pack-ca696e967b89b66c96f70bcb9d9e8bba42417bcc.pack | |
| 2 | + | |
Binary file not shown.
Binary file not shown.