Skip to content

Commit ed4ba38

Browse files
committed
Add test to validate we can deal with squashed indices
And we can, it's surprising that criner seems to not want ot pick it up from time to time.
1 parent 51559b8 commit ed4ba38

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:160d4fa169c620228ea7b4e67f94053f584e9a2169ec78282cc40470408a4332
3-
size 585116
2+
oid sha256:dc8ecb6536cebef322bd7a4eea5e177778b83cadae38dc04b8c185723dbad13b
3+
size 581808

tests/fixtures/make-index-from-parts.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ mkdir worktree
1717
git add .
1818
git commit -F "$parts/$commit.msg"
1919
done < "$commit_list"
20+
21+
git checkout --orphan squashed
22+
git add .
23+
git commit -m "squashed"
24+
echo '{"name":"git-repository","vers":"1.0.0","deps":[{"name":"anyhow","req":"^1","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"},{"name":"async-std","req":"^1.12.0","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"byte-unit","req":"^4.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"clru","req":"^0.5.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"document-features","req":"^0.2.0","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-actor","req":"^0.11.4","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-attributes","req":"^0.3.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-config","req":"^0.7.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-credentials","req":"^0.4.0","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-date","req":"^0.1.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-diff","req":"^0.17.2","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-discover","req":"^0.4.1","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-features","req":"^0.22.2","features":["progress","once_cell"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-glob","req":"^0.3.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-hash","req":"^0.9.8","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-index","req":"^0.4.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-lock","req":"^2.0.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-mailmap","req":"^0.3.2","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-object","req":"^0.20.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-odb","req":"^0.31.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-pack","req":"^0.21.2","features":["object-cache-dynamic"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-path","req":"^0.4.1","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-protocol","req":"^0.19.0","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-ref","req":"^0.15.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-refspec","req":"^0.1.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-revision","req":"^0.4.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-sec","req":"^0.3.1","features":["thiserror"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-tempfile","req":"^2.0.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-transport","req":"^0.19.2","features":[],"optional":true,"default_features":true,"target":null,"kind":"normal"},{"name":"git-traverse","req":"^0.16.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-url","req":"^0.7.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-validate","req":"^0.5.5","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"git-worktree","req":"^0.4.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"is_ci","req":"^1.1.1","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"},{"name":"log","req":"^0.4.14","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"regex","req":"^1.6.0","features":["std"],"optional":true,"default_features":false,"target":null,"kind":"normal"},{"name":"serde","req":"^1.0.114","features":["derive"],"optional":true,"default_features":false,"target":null,"kind":"normal"},{"name":"serial_test","req":"^0.8.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"},{"name":"signal-hook","req":"^0.3.9","features":[],"optional":false,"default_features":false,"target":null,"kind":"normal"},{"name":"smallvec","req":"^1.9.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"tempfile","req":"^3.2.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"},{"name":"thiserror","req":"^1.0.26","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"unicode-normalization","req":"^0.1.19","features":[],"optional":false,"default_features":false,"target":"cfg(target_vendor = \"apple\")","kind":"normal"},{"name":"walkdir","req":"^2.3.2","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"}],"cksum":"13a607977b24ff29831297c80ae3b24bd45b04f81f3ca3047744453d6ae6e920","features":{"async-network-client":["git-protocol/async-client","unstable"],"async-network-client-async-std":["async-std","async-network-client","git-transport/async-std"],"blocking-http-transport":["git-transport/http-client-curl"],"blocking-network-client":["git-protocol/blocking-client","unstable"],"cache-efficiency-debug":["git-features/cache-efficiency-debug"],"default":["max-performance","one-stop-shop"],"fast-sha1":["git-features/fast-sha1"],"local":["git-diff"],"max-performance":["fast-sha1","max-performance-safe"],"max-performance-safe":["git-features/parallel","git-features/zlib-ng-compat","git-pack/pack-cache-lru-static","git-pack/pack-cache-lru-dynamic"],"one-stop-shop":["local"],"serde1":["serde","git-pack/serde1","git-object/serde1","git-protocol/serde1","git-transport/serde1","git-ref/serde1","git-odb/serde1","git-index/serde1","git-mailmap/serde1","git-attributes/serde1","git-revision/serde1"],"unstable":["git-mailmap","git-credentials"]},"yanked":false,"links":null}' >> gi/t-/git-repository
25+
git commit -am "celebration"
26+
git checkout main
27+
2028
git gc
2129
)
2230

tests/index/mod.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ fn clone_if_needed() {
4646
}
4747

4848
#[test]
49-
fn quick_changes_since_last_fetch() -> crate::Result {
50-
let (index, _tmp) = index_rw()?;
49+
fn changes_since_last_fetch() -> crate::Result {
50+
let (mut index, _tmp) = index_rw()?;
5151
assert!(index.last_seen_reference().is_err(), "no marker exists");
5252
let num_changes_since_first_commit = index.fetch_changes()?.len();
5353
assert_eq!(
@@ -93,6 +93,18 @@ fn quick_changes_since_last_fetch() -> crate::Result {
9393
0,
9494
"nothing if there was no change"
9595
);
96+
97+
// now the remote has squashed their history, we should still be able to get the correct changes.
98+
index.branch_name = "squashed";
99+
let changes = index.fetch_changes()?;
100+
assert_eq!(changes.len(), 1);
101+
assert_eq!(
102+
changes
103+
.first()
104+
.and_then(|c| c.added().map(|v| (v.name.as_str(), v.version.as_str()))),
105+
Some(("git-repository", "1.0.0")),
106+
"there was just one actual changes compared to the previous state"
107+
);
96108
Ok(())
97109
}
98110

0 commit comments

Comments
 (0)