diff --git a/AddonsPanel.qml b/AddonsPanel.qml
index 0a52993..137eb4d 100644
--- a/AddonsPanel.qml
+++ b/AddonsPanel.qml
@@ -127,6 +127,13 @@ Page {
x: -width
id: addonMenu
visible: false
+ MenuItem {
+ id: repairButton
+ text: qsTr("repair")
+ icon.name: "document-edit-decrypt"
+ onTriggered: addon.reset()
+ }
+
MenuItem {
enabled: addon.status == Addon.Status.Ready
id: deleteButton
diff --git a/addon.cpp b/addon.cpp
index 5b46d4d..14b14d5 100644
--- a/addon.cpp
+++ b/addon.cpp
@@ -472,6 +472,19 @@ void Addon::confirmFileRemove(bool confirmed)
m_mutex.unlock();
}
+void Addon::reset()
+{
+ removeSubfolders();
+ delegate("Reset", [this](){
+ git_reference *ref = nullptr;
+ git_repository_head(&ref, m_repo.get());
+ git_object *obj = nullptr;
+ git_object_lookup(&obj, m_repo.get(), git_reference_target(ref), GIT_OBJ_ANY);
+ git_reset(m_repo.get(), obj, GIT_RESET_HARD, nullptr);
+ });
+ unpackSubfolders();
+}
+
QStringList Addon::branches() const
{
return m_branches;
diff --git a/addon.h b/addon.h
index b2e8c66..4e8dc90 100644
--- a/addon.h
+++ b/addon.h
@@ -178,6 +178,7 @@ public slots:
void unpackSubfolders();
void setFilesToRemove(QString filesToRemove);
void confirmFileRemove(bool confirmed);
+ void reset();
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Addon::GitStatus)
diff --git a/icons/breeze/svg/document-edit-decrypt.svg b/icons/breeze/svg/document-edit-decrypt.svg
new file mode 100644
index 0000000..9f643a9
--- /dev/null
+++ b/icons/breeze/svg/document-edit-decrypt.svg
@@ -0,0 +1,13 @@
+
diff --git a/qml.qrc b/qml.qrc
index bb6b373..2da771e 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -20,5 +20,6 @@
icons/breeze/COPYING-ICONS
icons/breeze/index.theme
ColorPicker.qml
+ icons/breeze/svg/document-edit-decrypt.svg