History

the first test to prove that HEAD reflogs are correct (#450)

Sebastian Thiel committed 4 years ago

Commit 1e7fd4e1 parent d2f56df2 files · +24 −4Browse files

Unified · Split

2 files
  1. git-repository/src/clone/fetch.rs +13 −2
  2. git-repository/tests/clone/mod.rs +11 −2
git-repository/src/clone/fetch.rs+13−2
@@ -110,7 +110,7 @@ impl PrepareFetch { · 109 unmodified lines
110110 None => return Ok(()),
111111 };
112112
113− let name = "HEAD".try_into().expect("valid");
113+ let name: git_ref::FullName = "HEAD".try_into().expect("valid");
114114 let reflog_message = || LogChange {
115115 mode: RefLog::AndReference,
116116 force_create_reflog: false,
@@ -138,10 +138,21 @@ impl PrepareFetch { · 21 unmodified lines
138138 expected: PreviousValue::Any,
139139 new: Target::Symbolic(referent),
140140 },
141− name,
141+ name: name.clone(),
142142 deref: false,
143143 },
144144 ])?;
145+ let mut log = reflog_message();
146+ log.mode = RefLog::Only;
147+ repo.edit_reference(RefEdit {
148+ change: git_ref::transaction::Change::Update {
149+ log,
150+ expected: PreviousValue::Any,
151+ new: Target::Peeled(head_peeled_id.to_owned()),
152+ },
153+ name,
154+ deref: false,
155+ })?;
145156 }
146157 None => {
147158 repo.edit_reference(RefEdit {
git-repository/tests/clone/mod.rs+11−2
@@ -4,6 +4,7 @@ use crate::remote; · 3 unmodified lines
44
55 #[cfg(feature = "blocking-network-client")]
66 mod blocking_io {
7+ use git_object::bstr::ByteSlice;
78 use git_repository as git;
89
910 use crate::remote;
@@ -75,8 +76,16 @@ mod blocking_io { · 65 unmodified lines
7576 }
7677
7778 let head = repo.head()?;
78− // dbg!(tmp.into_path());
79− // let _head_logs = head.log_iter().all()?.expect("log present").collect::<Vec<_>>();
79+ {
80+ let mut logs = head.log_iter();
81+ let head_logs = logs.all()?.expect("log present").collect::<Result<Vec<_>, _>>()?;
82+ assert_eq!(head_logs.len(), 1, "just created");
83+ let line = &head_logs[0];
84+ assert!(line.message.starts_with(b"clone: from "), "{:?} unexpected", line);
85+ let path = git_path::from_bstr(line.message.rsplit(|b| *b == b' ').next().expect("path").as_bstr());
86+ assert!(path.is_absolute(), "{:?} must be absolute", path);
87+ }
88+
8089 let referent = head.try_into_referent().expect("symbolic ref is present");
8190 assert!(
8291 referent.id().object().is_ok(),