GP-4921 fixed change markers after a check-in with the program open in the tool

This commit is contained in:
ghidragon 2024-09-18 13:38:38 -04:00 committed by ghidra1
parent f292bad0ed
commit 42462a3258
3 changed files with 34 additions and 27 deletions

View File

@ -279,7 +279,7 @@ public class MyProgramChangesDisplayPlugin extends ProgramPlugin implements Doma
}
if (isTrackingServerChanges()) {
if (programSaved) {
if (programSaved || programChangedRemotely) {
currentChangesSinceCheckoutMarks
.setAddressSetCollection(changeSet.getAddressSetCollectionSinceCheckout());
}

View File

@ -78,7 +78,7 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
bf = dbItem.open(version, minChangeVersion);
dbh = new DBHandle(bf);
program = new ProgramDB(dbh, OpenMode.IMMUTABLE, monitor, consumer);
getProgramChangeSet(program, bf);
loadProgramChangeSet(program, bf);
success = true;
return program;
}
@ -130,7 +130,7 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
dbh = new DBHandle(bf);
OpenMode openMode = okToUpgrade ? OpenMode.UPGRADE : OpenMode.UPDATE;
program = new ProgramDB(dbh, openMode, monitor, consumer);
getProgramChangeSet(program, bf);
loadProgramChangeSet(program, bf);
program.setProgramUserData(new ProgramUserDataDB(program));
success = true;
return program;
@ -184,7 +184,7 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
OpenMode openMode = okToUpgrade ? OpenMode.UPGRADE : OpenMode.UPDATE;
program = new ProgramDB(dbh, openMode, monitor, consumer);
if (checkoutId == FolderItem.DEFAULT_CHECKOUT_ID) {
getProgramChangeSet(program, bf);
loadProgramChangeSet(program, bf);
}
if (recover) {
recoverChangeSet(program, dbh);
@ -255,9 +255,11 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
}
}
private ProgramDBChangeSet getProgramChangeSet(ProgramDB program, ManagedBufferFile bf)
private ProgramDBChangeSet loadProgramChangeSet(ProgramDB program, ManagedBufferFile bf)
throws IOException {
ProgramDBChangeSet changeSet = (ProgramDBChangeSet) program.getChangeSet();
changeSet.clearAll();
BufferFile cf = bf.getNextChangeDataFile(true);
DBHandle cfh = null;
while (cf != null) {
@ -292,7 +294,7 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
bf = dbItem.open(toVer, fromVer);
dbh = new DBHandle(bf);
program = new ProgramDB(dbh, OpenMode.IMMUTABLE, null, this);
return getProgramChangeSet(program, bf);
return loadProgramChangeSet(program, bf);
}
catch (VersionException | IOException e) {
throw e;
@ -374,7 +376,7 @@ public class ProgramContentHandler extends DBWithUserDataContentHandler<ProgramD
}
LocalManagedBufferFile bf = dbItem.openForUpdate(FolderItem.DEFAULT_CHECKOUT_ID);
program.getDBHandle().setDBVersionedSourceFile(bf);
getProgramChangeSet(program, bf);
loadProgramChangeSet(program, bf);
}
}

View File

@ -361,6 +361,13 @@ class ProgramDBChangeSet implements ProgramChangeSet, DomainObjectDBChangeSet {
}
if (!isCheckedOut) { // if not versioned, wipe out change sets
clearAll();
}
clearUndo();
}
void clearAll() {
changedAddrsSinceCheckout.clear();
changedRegAddrsSinceCheckout.clear();
changedAddrsSinceSave.clear();
@ -377,9 +384,6 @@ class ProgramDBChangeSet implements ProgramChangeSet, DomainObjectDBChangeSet {
addedSourceArchiveIds.clear();
}
clearUndo();
}
@Override
public synchronized void startTransaction() {
inTransaction = true;
@ -659,6 +663,7 @@ class ProgramDBChangeSet implements ProgramChangeSet, DomainObjectDBChangeSet {
}
return true;
}
}
class ChangeDiff {