Merge remote-tracking branch 'origin/patch'

This commit is contained in:
Ryan Kurtz 2025-04-29 12:38:59 -04:00
commit 73b743654a
3 changed files with 39 additions and 29 deletions

View file

@ -15,16 +15,6 @@
*/
package ghidra.app.merge.listing;
import ghidra.app.merge.tool.ListingMergePanel;
import ghidra.app.merge.util.ConflictUtility;
import ghidra.program.model.address.*;
import ghidra.program.model.listing.*;
import ghidra.program.model.mem.MemoryAccessException;
import ghidra.program.util.ProgramConflictException;
import ghidra.util.exception.AssertException;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Hashtable;
@ -33,6 +23,17 @@ import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import ghidra.app.merge.tool.ListingMergePanel;
import ghidra.app.merge.util.ConflictUtility;
import ghidra.program.model.address.*;
import ghidra.program.model.listing.*;
import ghidra.program.model.mem.MemoryAccessException;
import ghidra.program.util.ProgramConflictException;
import ghidra.util.SystemUtilities;
import ghidra.util.exception.AssertException;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor;
/**
* Class for merging bookmark changes. This class can merge non-conflicting
* bookmark changes that were made to the checked out version. It can determine
@ -168,8 +169,8 @@ class BookmarkMerger extends AbstractListingMerger {
if (latest.length == 1) {
String latestCategory = latest[0].getCategory();
String latestComment = latest[0].getComment();
if (!originalCategory.equals(latestCategory) ||
!originalComment.equals(latestComment)) {
if (!SystemUtilities.isEqual(originalCategory, latestCategory) ||
!SystemUtilities.isEqual(originalComment, latestComment)) {
// MY deleted and LATEST changed, so conflict.
addConflict(addr, originalType, null);
}
@ -182,8 +183,8 @@ class BookmarkMerger extends AbstractListingMerger {
else if (my.length == 1) {
String myCategory = my[0].getCategory();
String myComment = my[0].getComment();
if (!originalCategory.equals(myCategory) ||
!originalComment.equals(myComment)) {
if (!SystemUtilities.isEqual(originalCategory, myCategory) ||
!SystemUtilities.isEqual(originalComment, myComment)) {
// Changed in MY
if (latest.length == 0) {
// MY changed and LATEST deleted, so conflict.
@ -192,8 +193,10 @@ class BookmarkMerger extends AbstractListingMerger {
else if (latest.length == 1) {
String latestCategory = latest[0].getCategory();
String latestComment = latest[0].getComment();
if ((!originalCategory.equals(latestCategory) || !originalComment.equals(latestComment)) &&
(!myCategory.equals(latestCategory) || !myComment.equals(latestComment))) {
if ((!SystemUtilities.isEqual(originalCategory, latestCategory) ||
!SystemUtilities.isEqual(originalComment, latestComment)) &&
(!SystemUtilities.isEqual(myCategory, latestCategory) ||
!SystemUtilities.isEqual(myComment, latestComment))) {
// MY changed and LATEST changed differently
addConflict(addr, originalType, null);
}
@ -220,7 +223,7 @@ class BookmarkMerger extends AbstractListingMerger {
// Deleted in MY
if (latest != null) {
String latestComment = latest.getComment();
if (!originalComment.equals(latestComment)) {
if (!SystemUtilities.isEqual(originalComment, latestComment)) {
// MY deleted and LATEST changed, so conflict.
addConflict(addr, originalType, originalCategory);
}
@ -232,7 +235,7 @@ class BookmarkMerger extends AbstractListingMerger {
}
else {
String myComment = my.getComment();
if (!originalComment.equals(myComment)) {
if (!SystemUtilities.isEqual(originalComment, myComment)) {
// Changed in MY
if (latest == null) {
// MY changed and LATEST deleted, so conflict.
@ -240,8 +243,8 @@ class BookmarkMerger extends AbstractListingMerger {
}
else {
String latestComment = latest.getComment();
if (!originalComment.equals(latestComment) &&
!myComment.equals(latestComment)) {
if (!SystemUtilities.isEqual(originalComment, latestComment) &&
!SystemUtilities.isEqual(myComment, latestComment)) {
// MY changed and LATEST changed differently
addConflict(addr, originalType, originalCategory);
}
@ -291,8 +294,8 @@ class BookmarkMerger extends AbstractListingMerger {
else if (latest.length == 1) {
String latestCategory = latest[0].getCategory();
String latestComment = latest[0].getComment();
if (!myCategory.equals(latestCategory) ||
!myComment.equals(latestComment)) {
if (!SystemUtilities.isEqual(myCategory, latestCategory) ||
!SystemUtilities.isEqual(myComment, latestComment)) {
// MY & LATEST added different NOTEs, so conflict.
addConflict(addr, myType, null);
}
@ -316,7 +319,7 @@ class BookmarkMerger extends AbstractListingMerger {
}
else {
String latestComment = latest.getComment();
if (!myComment.equals(latestComment)) {
if (!SystemUtilities.isEqual(myComment, latestComment)) {
// MY & LATEST added same bookmark w/ different comments, so conflict.
addConflict(addr, myType, myCategory);
}

View file

@ -76,7 +76,8 @@ public class BookmarkDB extends DatabaseObject implements Bookmark {
@Override
public String getCategory() {
return record.getString(BookmarkDBAdapter.CATEGORY_COL);
String category = record.getString(BookmarkDBAdapter.CATEGORY_COL);
return category != null ? category : ""; // NOTE: Old data may have stored null
}
public void setComment(String comment) {
@ -92,7 +93,8 @@ public class BookmarkDB extends DatabaseObject implements Bookmark {
@Override
public String getComment() {
return record.getString(BookmarkDBAdapter.COMMENT_COL);
String comment = record.getString(BookmarkDBAdapter.COMMENT_COL);
return comment != null ? comment : ""; // NOTE: Old data may have stored null
}
@Override

View file

@ -206,6 +206,11 @@ public class BookmarkDBAdapterV3 extends BookmarkDBAdapter {
return null;
}
if (category == null)
category = "";
if (comment == null)
comment = "";
Table table = tables[typeID];
long nextId = table.getKey() + 1;
long id = ((long) typeID << TYPE_ID_OFFSET) | nextId;