فهرست منبع

HackStudio: Only refresh Git widget on save if initialized

Itamar 4 سال پیش
والد
کامیت
b82a254da0
3فایلهای تغییر یافته به همراه35 افزوده شده و 7 حذف شده
  1. 28 6
      DevTools/HackStudio/Git/GitWidget.cpp
  2. 3 0
      DevTools/HackStudio/Git/GitWidget.h
  3. 4 1
      DevTools/HackStudio/main.cpp

+ 28 - 6
DevTools/HackStudio/Git/GitWidget.cpp

@@ -95,19 +95,41 @@ GitWidget::GitWidget(const LexicalPath& repo_root)
         Gfx::Bitmap::load_from_file("/res/icons/16x16/minus.png").release_nonnull());
 }
 
-void GitWidget::refresh()
+bool GitWidget::initialize()
 {
     auto result = GitRepo::try_to_create(m_repo_root);
-    if (result.type == GitRepo::CreateResult::Type::Success) {
+    switch (result.type) {
+    case GitRepo::CreateResult::Type::Success:
         m_git_repo = result.repo;
-    } else if (result.type == GitRepo::CreateResult::Type::GitProgramNotFound) {
+        return true;
+    case GitRepo::CreateResult::Type::GitProgramNotFound:
         GUI::MessageBox::show(window(), "Please install the Git port", "Error", GUI::MessageBox::Type::Error);
-        return;
-    } else if (result.type == GitRepo::CreateResult::Type::NoGitRepo) {
+        return false;
+    case GitRepo::CreateResult::Type::NoGitRepo: {
         auto decision = GUI::MessageBox::show(window(), "Create git repository?", "Git", GUI::MessageBox::Type::Question, GUI::MessageBox::InputType::YesNo);
         if (decision != GUI::Dialog::ExecResult::ExecYes)
-            return;
+            return false;
         m_git_repo = GitRepo::initialize_repository(m_repo_root);
+        return true;
+    }
+    default:
+        ASSERT_NOT_REACHED();
+    }
+}
+
+bool GitWidget::initialize_if_needed()
+{
+    if (initialized())
+        return true;
+
+    return initialize();
+}
+
+void GitWidget::refresh()
+{
+    if (!initialize_if_needed()) {
+        dbg() << "GitWidget initialization failed";
+        return;
     }
 
     ASSERT(!m_git_repo.is_null());

+ 3 - 0
DevTools/HackStudio/Git/GitWidget.h

@@ -43,10 +43,13 @@ public:
 
     void refresh();
     void set_view_diff_callback(ViewDiffCallback callback);
+    bool initialized() const { return !m_git_repo.is_null(); };
 
 private:
     explicit GitWidget(const LexicalPath& repo_root);
 
+    bool initialize();
+    bool initialize_if_needed();
     void stage_file(const LexicalPath&);
     void unstage_file(const LexicalPath&);
     void commit();

+ 4 - 1
DevTools/HackStudio/main.cpp

@@ -489,8 +489,11 @@ static int main_impl(int argc, char** argv)
     auto save_action = GUI::Action::create("Save", { Mod_Ctrl, Key_S }, Gfx::Bitmap::load_from_file("/res/icons/16x16/save.png"), [&](auto&) {
         if (g_currently_open_file.is_empty())
             return;
+
         current_editor().write_to_file(g_currently_open_file);
-        g_git_widget->refresh();
+
+        if (g_git_widget->initialized())
+            g_git_widget->refresh();
     });
 
     toolbar.add_action(new_action);