Skip to content

Commit 655387b

Browse files
committed
Fixing meta only changes
1 parent b804cde commit 655387b

1 file changed

Lines changed: 79 additions & 30 deletions

File tree

vcs-worker/src/operations/object/object_history_op.rs

Lines changed: 79 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::object_diff::compare_object_versions;
1+
use crate::object_diff::{compare_object_versions, ObjectChange};
22
use crate::operations::{Operation, OperationExample, OperationParameter, OperationRoute};
33
use axum::http::Method;
44
use serde::{Deserialize, Serialize};
@@ -158,42 +158,91 @@ impl ObjectHistoryOperation {
158158
}
159159
}
160160

161+
// Check for meta-only changes (meta objects that were added/modified without MOO object changes)
162+
let mut meta_only_affected = false;
163+
if !object_affected {
164+
// Look for meta objects whose MOO objects weren't processed
165+
for obj_info in change
166+
.added_objects
167+
.iter()
168+
.chain(change.modified_objects.iter())
169+
.filter(|o| o.object_type == VcsObjectType::MooMetaObject)
170+
{
171+
if tracked_names.contains(&obj_info.name) {
172+
object_affected = true;
173+
meta_only_affected = true;
174+
affected_name = Some(obj_info.name.clone());
175+
break;
176+
}
177+
}
178+
}
179+
161180
// If this change affected the object, add it to history
162181
if object_affected {
163182
// Get detailed object changes
164183
let object_change = if !object_deleted {
165-
// Find the object version in this change (check against all tracked names)
166-
let obj_info = change
167-
.added_objects
168-
.iter()
169-
.chain(change.modified_objects.iter())
170-
.find(|obj| {
171-
obj.object_type == VcsObjectType::MooObject
172-
&& tracked_names.contains(&obj.name)
173-
});
174-
175-
if let Some(obj_info) = obj_info {
176-
// Get the object name to use for comparison
177-
let comparison_name = affected_name.as_ref().unwrap_or(&request.object_name);
178-
179-
match compare_object_versions(
180-
&self.database,
181-
comparison_name,
182-
obj_info.version,
183-
Some(&change.verb_rename_hints),
184-
Some(&change.property_rename_hints),
184+
if meta_only_affected {
185+
// For meta-only changes, create an ObjectChange with just meta tracking
186+
let mut object_change = ObjectChange::new(
187+
affected_name.as_ref().unwrap_or(&request.object_name).clone()
188+
);
189+
190+
// Compare meta versions to populate meta fields
191+
if let Err(e) = crate::object_diff::compare_meta_versions(
192+
&self.database,
193+
affected_name.as_ref().unwrap_or(&request.object_name),
194+
&mut object_change
185195
) {
186-
Ok(change) => Some(change),
187-
Err(e) => {
188-
error!(
189-
"Failed to get detailed changes for '{}' at version {}: {}",
190-
comparison_name, obj_info.version, e
191-
);
192-
None
193-
}
196+
error!(
197+
"Failed to compare meta versions for '{}': {}",
198+
affected_name.as_ref().unwrap_or(&request.object_name), e
199+
);
200+
}
201+
202+
// Only return if there are actual meta changes
203+
if !object_change.meta_ignored_properties.is_empty()
204+
|| !object_change.meta_ignored_verbs.is_empty()
205+
|| !object_change.meta_unignored_properties.is_empty()
206+
|| !object_change.meta_unignored_verbs.is_empty()
207+
{
208+
Some(object_change)
209+
} else {
210+
None
194211
}
195212
} else {
196-
None
213+
// Find the object version in this change (check against all tracked names)
214+
let obj_info = change
215+
.added_objects
216+
.iter()
217+
.chain(change.modified_objects.iter())
218+
.find(|obj| {
219+
obj.object_type == VcsObjectType::MooObject
220+
&& tracked_names.contains(&obj.name)
221+
});
222+
223+
if let Some(obj_info) = obj_info {
224+
// Get the object name to use for comparison
225+
let comparison_name = affected_name.as_ref().unwrap_or(&request.object_name);
226+
227+
match compare_object_versions(
228+
&self.database,
229+
comparison_name,
230+
obj_info.version,
231+
Some(&change.verb_rename_hints),
232+
Some(&change.property_rename_hints),
233+
) {
234+
Ok(change) => Some(change),
235+
Err(e) => {
236+
error!(
237+
"Failed to get detailed changes for '{}' at version {}: {}",
238+
comparison_name, obj_info.version, e
239+
);
240+
None
241+
}
242+
}
243+
} else {
244+
None
245+
}
197246
}
198247
} else {
199248
None

0 commit comments

Comments
 (0)