|
KiCad PCB EDA Suite
|
Simple local history manager built on libgit2. More...
#include <local_history.h>
Public Member Functions | |
| LOCAL_HISTORY () | |
| ~LOCAL_HISTORY () | |
| bool | Init (const wxString &aProjectPath) |
| Initialize the local history repository for the given project path. | |
| bool | CommitSnapshot (const std::vector< wxString > &aFiles, const wxString &aTitle) |
| Commit the given files to the local history repository. | |
| bool | CommitFullProjectSnapshot (const wxString &aProjectPath, const wxString &aTitle) |
| Commit a snapshot of the entire project directory (excluding the .history directory and ignored transient files) to the local history repository. | |
| void | RegisterSaver (const void *aSaverObject, const std::function< void(const wxString &, std::vector< wxString > &)> &aSaver) |
| Register a saver callback invoked during autosave history commits. | |
| void | UnregisterSaver (const void *aSaverObject) |
| Unregister a previously registered saver callback. | |
| void | ClearAllSavers () |
| Clear all registered savers. | |
| bool | RunRegisteredSaversAndCommit (const wxString &aProjectPath, const wxString &aTitle) |
| Run all registered savers and, if any staged changes differ from HEAD, create a commit. | |
| void | NoteFileChange (const wxString &aFile) |
| Record that a file has been modified and should be included in the next snapshot. | |
| bool | CommitPending () |
| Commit any pending modified files to the history repository. | |
| bool | HistoryExists (const wxString &aProjectPath) |
| Return true if history exists for the project. | |
| bool | TagSave (const wxString &aProjectPath, const wxString &aFileType) |
| Tag a manual save in the local history repository. | |
| bool | CommitDuplicateOfLastSave (const wxString &aProjectPath, const wxString &aFileType, const wxString &aMessage) |
| Create a new commit duplicating the tree pointed to by Last_Save_<fileType> and move the Last_Save_<fileType> tag to the new commit (used when user discards changes). | |
| bool | EnforceSizeLimit (const wxString &aProjectPath, size_t aMaxBytes) |
| Enforce total size limit by rebuilding trimmed history keeping newest commits whose cumulative unique blob sizes fit within limit. | |
| bool | HeadNewerThanLastSave (const wxString &aProjectPath) |
| Return true if the autosave data is newer than the last manual save. | |
| wxString | GetHeadHash (const wxString &aProjectPath) |
| Return the current head commit hash. | |
| bool | RestoreCommit (const wxString &aProjectPath, const wxString &aHash, wxWindow *aParent=nullptr) |
| Restore the project files to the state recorded by the given commit hash. | |
| void | ShowRestoreDialog (const wxString &aProjectPath, wxWindow *aParent) |
| Show a dialog allowing the user to choose a snapshot to restore. | |
Private Attributes | |
| std::set< wxString > | m_pendingFiles |
| std::map< const void *, std::function< void(const wxString &, std::vector< wxString > &)> > | m_savers |
Simple local history manager built on libgit2.
Stores history for project files in a hidden .history git repository within the project directory.
Definition at line 38 of file local_history.h.
| LOCAL_HISTORY::LOCAL_HISTORY | ( | ) |
Definition at line 57 of file local_history.cpp.
| LOCAL_HISTORY::~LOCAL_HISTORY | ( | ) |
Definition at line 61 of file local_history.cpp.
| void LOCAL_HISTORY::ClearAllSavers | ( | ) |
Clear all registered savers.
Definition at line 102 of file local_history.cpp.
References m_savers, and traceAutoSave.
Referenced by KIWAY::ProjectChanged().
| bool LOCAL_HISTORY::CommitDuplicateOfLastSave | ( | const wxString & | aProjectPath, |
| const wxString & | aFileType, | ||
| const wxString & | aMessage ) |
Create a new commit duplicating the tree pointed to by Last_Save_<fileType> and move the Last_Save_<fileType> tag to the new commit (used when user discards changes).
Definition at line 681 of file local_history.cpp.
References HISTORY_LOCK_MANAGER::GetRepository(), HISTORY_LOCK_MANAGER::IsLocked(), and traceAutoSave.
Referenced by PCB_EDIT_FRAME::canCloseWindow(), and SCH_EDIT_FRAME::canCloseWindow().
| bool LOCAL_HISTORY::CommitFullProjectSnapshot | ( | const wxString & | aProjectPath, |
| const wxString & | aTitle ) |
Commit a snapshot of the entire project directory (excluding the .history directory and ignored transient files) to the local history repository.
This does not modify any document dirty flags; it purely mirrors on-disk state for history purposes.
Definition at line 520 of file local_history.cpp.
References CommitSnapshot(), name, and path.
Referenced by RestoreCommit(), PCB_EDIT_FRAME::SavePcbFile(), and SCH_EDIT_FRAME::saveSchematicFile().
| bool LOCAL_HISTORY::CommitPending | ( | ) |
Commit any pending modified files to the history repository.
Definition at line 291 of file local_history.cpp.
References CommitSnapshot(), and m_pendingFiles.
| bool LOCAL_HISTORY::CommitSnapshot | ( | const std::vector< wxString > & | aFiles, |
| const wxString & | aTitle ) |
Commit the given files to the local history repository.
Definition at line 403 of file local_history.cpp.
References delta, HISTORY_LOCK_MANAGER::GetIndex(), HISTORY_LOCK_MANAGER::GetLockError(), HISTORY_LOCK_MANAGER::GetRepository(), historyPath(), HISTORY_LOCK_MANAGER::IsLocked(), Pgm(), and traceAutoSave.
Referenced by CommitFullProjectSnapshot(), CommitPending(), and Init().
| bool LOCAL_HISTORY::EnforceSizeLimit | ( | const wxString & | aProjectPath, |
| size_t | aMaxBytes ) |
Enforce total size limit by rebuilding trimmed history keeping newest commits whose cumulative unique blob sizes fit within limit.
Definition at line 773 of file local_history.cpp.
References dirSizeRecursive(), HISTORY_LOCK_MANAGER::GetRepository(), historyPath(), HISTORY_LOCK_MANAGER::IsLocked(), name, and traceAutoSave.
Referenced by KICAD_MANAGER_FRAME::CloseProject().
| wxString LOCAL_HISTORY::GetHeadHash | ( | const wxString & | aProjectPath | ) |
Return the current head commit hash.
Definition at line 1130 of file local_history.cpp.
References historyPath().
Referenced by KICAD_MANAGER_FRAME::LoadProject().
| bool LOCAL_HISTORY::HeadNewerThanLastSave | ( | const wxString & | aProjectPath | ) |
Return true if the autosave data is newer than the last manual save.
Definition at line 631 of file local_history.cpp.
References historyPath().
| bool LOCAL_HISTORY::HistoryExists | ( | const wxString & | aProjectPath | ) |
Return true if history exists for the project.
Definition at line 576 of file local_history.cpp.
References historyPath().
Referenced by KICAD_MANAGER_FRAME::doReCreateMenuBar(), and ShowRestoreDialog().
| bool LOCAL_HISTORY::Init | ( | const wxString & | aProjectPath | ) |
Initialize the local history repository for the given project path.
Definition at line 299 of file local_history.cpp.
References CommitSnapshot(), historyPath(), name, path, Pgm(), and traceAutoSave.
Referenced by EDA_BASE_FRAME::CommonSettingsChanged(), KICAD_MANAGER_FRAME::LoadProject(), PCB_EDIT_FRAME::OnBoardLoaded(), PCB_EDIT_FRAME::OpenProjectFiles(), and SCH_EDIT_FRAME::OpenProjectFiles().
| void LOCAL_HISTORY::NoteFileChange | ( | const wxString & | aFile | ) |
Record that a file has been modified and should be included in the next snapshot.
Definition at line 65 of file local_history.cpp.
References m_pendingFiles, and Pgm().
Referenced by PCB_EDIT_FRAME::OnModify(), and SCH_EDIT_FRAME::OnModify().
| void LOCAL_HISTORY::RegisterSaver | ( | const void * | aSaverObject, |
| const std::function< void(const wxString &, std::vector< wxString > &)> & | aSaver ) |
Register a saver callback invoked during autosave history commits.
The callback receives the project path and should append absolute file paths (within that project) to aFiles for inclusion.
| aSaverObject | Unique object pointer identifier for this saver (to prevent duplicate registration) |
| aSaver | The saver callback function |
Definition at line 76 of file local_history.cpp.
References m_savers, and traceAutoSave.
Referenced by KICAD_MANAGER_FRAME::ProjectChanged(), PCB_EDIT_FRAME::ProjectChanged(), and SCH_EDIT_FRAME::ProjectChanged().
| bool LOCAL_HISTORY::RestoreCommit | ( | const wxString & | aProjectPath, |
| const wxString & | aHash, | ||
| wxWindow * | aParent = nullptr ) |
Restore the project files to the state recorded by the given commit hash.
Definition at line 1610 of file local_history.cpp.
References CommitFullProjectSnapshot(), HISTORY_LOCK_MANAGER::GetRepository(), HISTORY_LOCK_MANAGER::IsLocked(), and traceAutoSave.
Referenced by KICAD_MANAGER_FRAME::LoadProject(), KICAD_MANAGER_FRAME::RestoreCommitFromHistory(), and ShowRestoreDialog().
| bool LOCAL_HISTORY::RunRegisteredSaversAndCommit | ( | const wxString & | aProjectPath, |
| const wxString & | aTitle ) |
Run all registered savers and, if any staged changes differ from HEAD, create a commit.
Definition at line 109 of file local_history.cpp.
References m_savers, Pgm(), and traceAutoSave.
Referenced by EDA_BASE_FRAME::doAutoSave().
| void LOCAL_HISTORY::ShowRestoreDialog | ( | const wxString & | aProjectPath, |
| wxWindow * | aParent ) |
Show a dialog allowing the user to choose a snapshot to restore.
Definition at line 1773 of file local_history.cpp.
References _, HistoryExists(), historyPath(), and RestoreCommit().
Referenced by KICAD_MANAGER_FRAME::RestoreLocalHistory().
| bool LOCAL_HISTORY::TagSave | ( | const wxString & | aProjectPath, |
| const wxString & | aFileType ) |
Tag a manual save in the local history repository.
Definition at line 581 of file local_history.cpp.
References HISTORY_LOCK_MANAGER::GetRepository(), HISTORY_LOCK_MANAGER::IsLocked(), and traceAutoSave.
Referenced by PCB_EDIT_FRAME::SavePcbFile(), and SCH_EDIT_FRAME::saveSchematicFile().
| void LOCAL_HISTORY::UnregisterSaver | ( | const void * | aSaverObject | ) |
Unregister a previously registered saver callback.
| aSaverObject | The object pointer that was used to register the saver |
Definition at line 90 of file local_history.cpp.
References m_savers, and traceAutoSave.
|
private |
Definition at line 109 of file local_history.h.
Referenced by CommitPending(), and NoteFileChange().
|
private |
Definition at line 110 of file local_history.h.
Referenced by ClearAllSavers(), RegisterSaver(), RunRegisteredSaversAndCommit(), and UnregisterSaver().