From f0fd35d44b212475766657f5422a282439adbf17 Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Wed, 30 Jul 2025 11:14:31 +0200 Subject: [PATCH 1/2] chore: Downgrade many log statements from debug to trace level --- src/merge_3dm.rs | 6 +++--- src/tree_builder.rs | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/merge_3dm.rs b/src/merge_3dm.rs index 3afd9a9..9d440f9 100644 --- a/src/merge_3dm.rs +++ b/src/merge_3dm.rs @@ -1,6 +1,6 @@ use std::{path::Path, thread, time::Instant}; -use log::debug; +use log::{debug, trace}; use crate::{ ast::AstNode, @@ -260,12 +260,12 @@ fn fix_pcs_inconsistencies<'a>( let mut conflicting_triples = changeset.inconsistent_triples(pcs); let count = changeset.inconsistent_triples(pcs).count(); if count > 0 { - debug!("number of conflicting triples: {count}"); + trace!("number of conflicting triples: {count}"); } if let Some(triple) = conflicting_triples.find(|triple| triple.revision != Revision::Base) { - debug!("eliminating {pcs} by {triple}"); + trace!("eliminating {pcs} by {triple}"); conflict_found = true; } } diff --git a/src/tree_builder.rs b/src/tree_builder.rs index 01539ee..4d2ed24 100644 --- a/src/tree_builder.rs +++ b/src/tree_builder.rs @@ -3,7 +3,7 @@ use std::fmt::Display; use either::Either; use itertools::Itertools; -use log::debug; +use log::{debug, trace}; use rustc_hash::FxHashSet; use crate::{ @@ -201,7 +201,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { seen_nodes.insert(predecessor); let pad = visiting_state.indentation(); - debug!("{pad}{node} build_subtree_from_changeset"); + trace!("{pad}{node} build_subtree_from_changeset"); loop { match cursor.len() { @@ -296,10 +296,10 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { .collect(); if !seen_nodes.is_superset(&non_base_nodes) { // We have a conflict where some node is deleted and we cannot gather where exactly. - debug!( + trace!( "{pad}{node} Error while gathering successors, some non-base successors were not visited:" ); - debug!( + trace!( "{pad}{}", non_base_nodes.difference(&seen_nodes).format(", ") ); @@ -312,7 +312,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { .copied() .filter(|pcsnode| !seen_nodes.contains(pcsnode)) { - debug!("{pad}{node} Checking unvisited base node {unvisited_base_node}"); + trace!("{pad}{node} Checking unvisited base node {unvisited_base_node}"); let PCSNode::Node { node: unvisited, revisions, @@ -417,7 +417,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { visiting_state: &mut VisitingState<'a>, ) -> Result<(&'b SuccessorsCursor<'a>, MergedTree<'a>), String> { let pad = visiting_state.indentation(); - debug!("{pad}{predecessor} build_conflict"); + trace!("{pad}{predecessor} build_conflict"); let (end_left, list_left) = self.extract_conflict_side( predecessor, Revision::Left, @@ -487,7 +487,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { visiting_state: &mut VisitingState<'a>, ) -> Result<(&'b SuccessorsCursor<'a>, Vec<&'a AstNode<'a>>), String> { let pad = visiting_state.indentation(); - debug!("{pad}{starting_node} extract_conflict_side"); + trace!("{pad}{starting_node} extract_conflict_side"); let mut result = Vec::new(); let mut cursor = starting_node; loop { @@ -534,7 +534,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { visiting_state: &mut VisitingState<'a>, ) -> Result, String> { let pad = visiting_state.indentation(); - debug!("{pad}{node} commutative_or_line_based_local_fallback"); + trace!("{pad}{node} commutative_or_line_based_local_fallback"); let PCSNode::Node { node, .. } = node else { return Err(format!( "impossible to do a line-based local fallback for a virtual PCS node {node}" @@ -610,7 +610,7 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { visiting_state: &mut VisitingState<'a>, ) -> Result>, String> { let pad = visiting_state.indentation(); - debug!("{pad}commutatively_merge_lists"); + trace!("{pad}commutatively_merge_lists"); let trimmed_sep = commutative_parent.trimmed_separator(); let trimmed_left_delim = commutative_parent.left_delim.unwrap_or_default().trim(); let trimmed_right_delim = commutative_parent.right_delim.unwrap_or_default().trim(); @@ -661,19 +661,19 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { .iter() .filter(|x| !base_leaders.contains(x)) .collect(); - debug!("{pad}left_added: {}", left_added.iter().format(", ")); + trace!("{pad}left_added: {}", left_added.iter().format(", ")); let right_added: Vec<_> = right_leaders .iter() .filter(|x| !base_leaders.contains(x) && !left_added.contains(x)) .collect(); - debug!("{pad}right_added: {}", right_added.iter().format(", ")); + trace!("{pad}right_added: {}", right_added.iter().format(", ")); // then, compute the symmetric difference between the base and right lists let right_removed: HashSet> = base_leaders .into_iter() .filter(|x| !right_leaders.contains(x)) .collect(); - debug!("{pad}right_removed: {}", right_removed.iter().format(", ")); + trace!("{pad}right_removed: {}", right_removed.iter().format(", ")); // check which right removed elements have been modified on the left-hand side, // in which case they should be kept let mut removed_visiting_state = visiting_state.clone(); -- 2.47.3 From 1e5fb453346d1cb773db64efff95069659b65b8d Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Wed, 30 Jul 2025 12:59:02 +0200 Subject: [PATCH 2/2] chore: Add logging statement to make it easier to detect which merge was returned --- src/merge.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/merge.rs b/src/merge.rs index c636f9c..c82d44d 100644 --- a/src/merge.rs +++ b/src/merge.rs @@ -50,7 +50,7 @@ pub fn line_merge_and_structured_resolution( timeout, ); - match select_best_merge(merges) { + let merge_result = match select_best_merge(merges) { LineBasedAndBestAre::TheSame(merge) => merge, LineBasedAndBestAre::NotTheSame { line_based, best } => { if best.conflict_count == 0 { @@ -76,7 +76,9 @@ pub fn line_merge_and_structured_resolution( } best } - } + }; + debug!("Selected best merge: {}", merge_result.method); + merge_result } /// Attempts various merging methods in turn, and stops early when -- 2.47.3