replacement in pijul/src/commands/mod.rs at line 368
[4.2085]→[4.2085:2230](∅→∅) − Conflict::Name { ref path } => writeln!(w, " - Name conflict on \"{}\"", path)?,
− Conflict::ZombieFile { ref path } => {
+ Conflict::Name { ref path, .. } => writeln!(w, " - Name conflict on \"{}\"", path)?,
+ Conflict::ZombieFile { ref path, .. } => {
replacement in pijul/src/commands/mod.rs at line 375
[4.2462]→[4.2462:2527](∅→∅) − Conflict::Zombie { ref path, ref line } => writeln!(
+ Conflict::Zombie {
+ ref path, ref line, ..
+ } => writeln!(
replacement in pijul/src/commands/mod.rs at line 382
[4.2660]→[4.2660:2725](∅→∅) − Conflict::Cyclic { ref path, ref line } => writeln!(
+ Conflict::Cyclic {
+ ref path, ref line, ..
+ } => writeln!(
replacement in pijul/src/commands/mod.rs at line 389
[4.2855]→[4.2855:2919](∅→∅) − Conflict::Order { ref path, ref line } => writeln!(
+ Conflict::Order {
+ ref path, ref line, ..
+ } => writeln!(
edit in libpijul/src/vertex_buffer.rs at line 57
+ pub inode_vertex: Position<ChangeId>,
replacement in libpijul/src/vertex_buffer.rs at line 63
[4.219137]→[4.219137:219232](∅→∅) − pub fn new(w: W, path: &'b str, conflicts: &'a mut Vec<crate::output::Conflict>) -> Self {
+ pub fn new(
+ w: W,
+ path: &'b str,
+ inode_vertex: Position<ChangeId>,
+ conflicts: &'a mut Vec<crate::output::Conflict>,
+ ) -> Self {
edit in libpijul/src/vertex_buffer.rs at line 70
edit in libpijul/src/vertex_buffer.rs at line 141
+ inode_vertex: [self.inode_vertex],
edit in libpijul/src/vertex_buffer.rs at line 143
+ changes: side.iter().cloned().cloned().collect(),
+ id,
edit in libpijul/src/vertex_buffer.rs at line 155
+ inode_vertex: [self.inode_vertex],
edit in libpijul/src/vertex_buffer.rs at line 157
+ changes: add_del.iter().cloned().cloned().collect(),
+ id,
edit in libpijul/src/vertex_buffer.rs at line 165
+ inode_vertex: [self.inode_vertex],
edit in libpijul/src/vertex_buffer.rs at line 167
+ changes: Vec::new(),
+ id,
edit in libpijul/src/vertex_buffer.rs at line 172
+ fn conflict_next(&mut self, id_: usize, side: &[&Hash]) -> Result<(), std::io::Error> {
+ for conflict in self.conflicts.iter_mut().rev() {
+ match conflict {
+ crate::output::Conflict::Order { id, changes, .. } if *id == id_ => {
+ changes.extend(side.into_iter().cloned())
+ }
+ crate::output::Conflict::Zombie { id, changes, .. } if *id == id_ => {
+ changes.extend(side.into_iter().cloned())
+ }
+ crate::output::Conflict::Cyclic { id, changes, .. } if *id == id_ => {
+ changes.extend(side.into_iter().cloned())
+ }
+ _ => break,
+ }
+ }
+ self.output_conflict_marker(SEPARATOR, id_, side)
+ }
edit in libpijul/src/output/output.rs at line 22
+ inodes: Vec<Position<ChangeId>>,
+ changes: Vec<Hash>,
edit in libpijul/src/output/output.rs at line 27
+ inode: [Position<ChangeId>; 1],
+ changes: Vec<Hash>,
edit in libpijul/src/output/output.rs at line 31
[4.4295]→[4.4295:4328](∅→∅) − pos: Position<ChangeId>,
edit in libpijul/src/output/output.rs at line 32
+ pos: [Position<ChangeId>; 1],
+ names: Vec<Vertex<ChangeId>>,
+ changes: Vec<Hash>,
edit in libpijul/src/output/output.rs at line 38
+ inode_vertex: [Position<ChangeId>; 1],
edit in libpijul/src/output/output.rs at line 40
+ changes: Vec<Hash>,
+ id: usize,
edit in libpijul/src/output/output.rs at line 45
+ inode_vertex: [Position<ChangeId>; 1],
edit in libpijul/src/output/output.rs at line 47
+ changes: Vec<Hash>,
+ id: usize,
edit in libpijul/src/output/output.rs at line 52
+ inode_vertex: [Position<ChangeId>; 1],
edit in libpijul/src/output/output.rs at line 54
+ changes: Vec<Hash>,
+ id: usize,
edit in libpijul/src/output/output.rs at line 57
+ }
+
+ impl Conflict {
+ pub fn changes(&self) -> &[Hash] {
+ match self {
+ Conflict::Name { ref changes, .. } => changes,
+ Conflict::ZombieFile { ref changes, .. } => changes,
+ Conflict::MultipleNames { ref changes, .. } => changes,
+ Conflict::Zombie { ref changes, .. } => changes,
+ Conflict::Cyclic { ref changes, .. } => changes,
+ Conflict::Order { ref changes, .. } => changes,
+ }
+ }
+
+ pub fn inodes(&self) -> &[Position<ChangeId>] {
+ match self {
+ Conflict::Name { ref inodes, .. } => inodes,
+ Conflict::ZombieFile { ref inode, .. } => inode,
+ Conflict::MultipleNames { ref pos, .. } => pos,
+ Conflict::Zombie {
+ ref inode_vertex, ..
+ } => inode_vertex,
+ Conflict::Cyclic {
+ ref inode_vertex, ..
+ } => inode_vertex,
+ Conflict::Order {
+ ref inode_vertex, ..
+ } => inode_vertex,
+ }
+ }
edit in libpijul/src/output/output.rs at line 125
edit in libpijul/src/output/output.rs at line 258
edit in libpijul/src/output/output.rs at line 260
replacement in libpijul/src/output/output.rs at line 304
[4.13906]→[4.13906:13975](∅→∅) − let o = output_loop(repo, changes, txn, channel, work, stop, 0);
+ let o = output_loop(repo, changes, txn.clone(), channel, work, stop, 0);
edit in libpijul/src/output/output.rs at line 324
+
+ let txn_ = txn.read();
+ for (pos, (_, path, names)) in state.done_vertices {
+ if !names.is_empty() {
+ state.conflicts.insert(Conflict::MultipleNames {
+ changes: names
+ .iter()
+ .map(|v| txn_.get_external(&v.change).unwrap().unwrap().into())
+ .collect(),
+ pos: [pos],
+ names,
+ path,
+ });
+ }
+ }
+
replacement in libpijul/src/output/output.rs at line 364
[4.14869]→[4.14869:14945](∅→∅) − done_vertices: HashMap<Position<ChangeId>, (Vertex<ChangeId>, String)>,
+ done_vertices: HashMap<Position<ChangeId>, (Vertex<ChangeId>, String, Vec<Vertex<ChangeId>>)>,
+
edit in libpijul/src/output/output.rs at line 367
replacement in libpijul/src/output/output.rs at line 411
[4.16489]→[4.16489:16523](∅→∅) − is_first_name: &mut bool,
+ is_first_name: &mut Option<Position<ChangeId>>,
+ name_conflict: &mut Vec<Position<ChangeId>>,
replacement in libpijul/src/output/output.rs at line 415
[4.16619]→[4.16619:16655](∅→∅) − Entry::Occupied(e) => {
+ Entry::Occupied(mut e) => {
replacement in libpijul/src/output/output.rs at line 423
[4.16880]→[4.16880:16923](∅→∅) − if e.get().0 != name_key {
+ let e = e.get_mut();
+ if e.0 != name_key {
+ if e.2.is_empty() {
+ e.2.push(e.0)
+ }
replacement in libpijul/src/output/output.rs at line 429
[4.16985]→[4.508:576](∅→∅),
[4.576]→[4.17051:17170](∅→∅),
[4.17051]→[4.17051:17170](∅→∅) − self.conflicts.insert(Conflict::MultipleNames {
− pos: output_item.pos,
− path: e.get().1.clone(),
− });
replacement in libpijul/src/output/output.rs at line 438
[4.17397]→[4.17397:17437](∅→∅) − let name = if !*is_first_name {
+ let name = if let Some(ref inode) = is_first_name {
+ if name_conflict.is_empty() {
+ name_conflict.push(*inode)
+ }
+ name_conflict.push(output_item.pos);
+
edit in libpijul/src/output/output.rs at line 447
[4.17597]→[4.577:655](∅→∅) − self.conflicts.insert(Conflict::Name { path: name.clone() });
edit in libpijul/src/output/output.rs at line 449
[4.17715]→[4.17715:17780](∅→∅),
[4.17780]→[4.656:711](∅→∅),
[4.711]→[4.17833:17894](∅→∅),
[4.17833]→[4.17833:17894](∅→∅) − debug!("not outputting {:?} {:?}", a, name_key);
− self.conflicts.insert(Conflict::Name {
− path: a.to_string(),
− });
replacement in libpijul/src/output/output.rs at line 452
[4.17973]→[4.17973:18009](∅→∅) − *is_first_name = false;
+ *is_first_name = Some(output_item.pos);
replacement in libpijul/src/output/output.rs at line 458
[4.18209]→[4.18209:18274](∅→∅) − name_entry.insert((name_key, output_item.path.clone()));
+ name_entry.insert((name_key, output_item.path.clone(), Vec::new()));
replacement in libpijul/src/output/output.rs at line 476
[4.25796]→[4.18953:18991](∅→∅),
[4.18953]→[4.18953:18991](∅→∅) − let mut is_first_name = true;
+ let mut is_first_name = None;
+ let mut name_conflict = Vec::new();
replacement in libpijul/src/output/output.rs at line 480
[4.19105]→[4.19105:19204](∅→∅) − let name = match self.make_inode(&a, name_key, &mut output_item, &mut is_first_name) {
+ let name = match self.make_inode(
+ &a,
+ name_key,
+ &mut output_item,
+ &mut is_first_name,
+ &mut name_conflict,
+ ) {
replacement in libpijul/src/output/output.rs at line 552
[4.21266]→[4.21266:21305](∅→∅) − if output_item.is_zombie {
+ if let Some(id) = output_item.is_zombie.take() {
replacement in libpijul/src/output/output.rs at line 554
[4.773]→[4.21364:21408](∅→∅),
[4.21364]→[4.21364:21408](∅→∅) − path: name.to_string(),
+ path: path.clone(),
+ changes: id,
+ inode: [output_item.pos],
edit in libpijul/src/output/output.rs at line 560
+ if !name_conflict.is_empty() {
+ let txn = txn.read();
+ self.conflicts.insert(Conflict::Name {
+ changes: name_conflict
+ .iter()
+ .map(|v| txn.get_external(&v.change).unwrap().unwrap().into())
+ .collect(),
+ path: a.clone(),
+ inodes: name_conflict,
+ });
+ }
replacement in libpijul/src/output/output.rs at line 729
+ debug!("write");
+ let txn = txn.write();
+ debug!("/write");
replacement in libpijul/src/output/output.rs at line 738
[4.26328]→[4.26328:26402](∅→∅) − let mut f = vertex_buffer::ConflictsWriter::new(w, &path, conflicts);
+ debug!("vertex_buffer");
+ let mut f = vertex_buffer::ConflictsWriter::new(w, &path, output_item.pos, conflicts);
+ debug!("outputting graph");
replacement in libpijul/src/output/mod.rs at line 137
[4.686542]→[4.686542:686563](∅→∅) + is_zombie: Option<Vec<Hash>>,
replacement in libpijul/src/output/mod.rs at line 298
[4.87230]→[4.87230:87273](∅→∅) − ) -> Result<bool, TxnErr<T::GraphError>> {
+ ) -> Result<Option<Vec<Hash>>, TxnErr<T::GraphError>> {
replacement in libpijul/src/output/mod.rs at line 304
[4.87402]→[4.87402:87419](∅→∅) + let mut id = Vec::new();
+ let f = EdgeFlags::FOLDER | EdgeFlags::PARENT;
+ for e in iter_adjacent(txn, channel, pos.inode_vertex(), f, EdgeFlags::all())? {
+ let e = e?;
+ if e.flag().contains(f) {
+ id.push(txn.get_external(&e.introduced_by())?.unwrap().into())
+ }
+ }
+ Ok(Some(id))
replacement in libpijul/src/output/mod.rs at line 314
[4.87432]→[4.87432:87450](∅→∅) replacement in libpijul/src/output/archive.rs at line 196
[3.5317]→[4.693414:693456](∅→∅),
[4.693414]→[4.693414:693456](∅→∅) − let mut is_first_name = true;
+ let mut is_first_name = None;
replacement in libpijul/src/output/archive.rs at line 205
[4.693808]→[4.693808:693862](∅→∅) + changes: Vec::new(),
+ pos: [output_item.pos],
edit in libpijul/src/output/archive.rs at line 208
replacement in libpijul/src/output/archive.rs at line 219
[4.694368]→[4.694368:694415](∅→∅) − let name = if !is_first_name {
+ let name = if let Some(inode) = is_first_name {
+ let inodes = vec![inode, output_item.pos];
+ let txn = txn.read();
edit in libpijul/src/output/archive.rs at line 224
+ changes: inodes
+ .iter()
+ .map(|i| txn.get_external(&i.change).unwrap().unwrap().into())
+ .collect(),
+ inodes,
replacement in libpijul/src/output/archive.rs at line 232
[4.694588]→[4.694588:694631](∅→∅) + is_first_name = Some(output_item.pos);
edit in libpijul/src/output/archive.rs at line 279
replacement in libpijul/src/output/archive.rs at line 295
[4.696145]→[4.696145:696188](∅→∅) − if output_item.is_zombie {
+ if let Some(id) = output_item.is_zombie {
edit in libpijul/src/output/archive.rs at line 298
+ changes: id,
+ inode: [output_item.pos],
replacement in libpijul/src/alive/output.rs at line 63
[4.5871]→[4.5871:6022](∅→∅) − let ext = txn.get_external(&graph[vid].vertex.change)?.unwrap();
− line_buf.begin_conflict(id, &[&ext.into()])?;
+ let ext = txn.get_external(&graph[vid].vertex.change)?.unwrap().into();
+ std::mem::drop(channel);
+ std::mem::drop(txn);
+ line_buf.begin_conflict(id, &[&ext])?;
edit in libpijul/src/alive/output.rs at line 69
+ std::mem::drop(channel);
+ std::mem::drop(txn);
replacement in libpijul/src/alive/output.rs at line 86
[3.9886]→[4.6440:6529](∅→∅),
[4.6440]→[4.6440:6529](∅→∅),
[4.6529]→[2.32:105](∅→∅) − let ext = txn.get_external(&graph[vid].vertex.change)?.unwrap();
− line_buf.conflict_next(elt.id, &[&ext.into()])?;
+ let ext = txn.get_external(&graph[vid].vertex.change)?.unwrap().into();
+ std::mem::drop(txn);
+ line_buf.conflict_next(elt.id, &[&ext])?;