src/eric7/Plugins/VcsPlugins/vcsGit/GitWorktreeDialog.py

Thu, 15 Dec 2022 17:15:09 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 15 Dec 2022 17:15:09 +0100
branch
eric7
changeset 9620
9563c83ce83d
child 9621
2b7d5e6863c2
permissions
-rw-r--r--

Version Control Systems - git
- Added a dialog to manage worktrees ( `git worktree` commands).

9620
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to offer the worktree management functionality.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QDateTime, QProcess, QSize, Qt, QTime, QTimer, pyqtSlot
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtWidgets import (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 QAbstractButton,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 QDialog,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 QDialogButtonBox,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 QHeaderView,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 QInputDialog,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 QLineEdit,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 QMenu,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 QTreeWidgetItem,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 QWidget,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from eric7 import Preferences
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 from eric7.EricGui import EricPixmapCache
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 from eric7.EricWidgets import EricMessageBox, EricPathPickerDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 from .GitDialog import GitDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 from .Ui_GitWorktreeDialog import Ui_GitWorktreeDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 class GitWorktreeDialog(QWidget, Ui_GitWorktreeDialog):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 Class implementing a dialog to offer the worktree management functionality.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 StatusRole = Qt.ItemDataRole.UserRole
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 def __init__(self, vcs, parent=None):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Constructor
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param vcs reference to the vcs object
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type Git
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @param parent reference to the parent widget (defaults to None)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @type QWidget (optional)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 super().__init__(parent)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.setupUi(self)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__nameColumn = 0
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__pathColumn = 1
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__commitColumn = 2
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__branchColumn = 3
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.worktreeList.header().setSortIndicator(0, Qt.SortOrder.AscendingOrder)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__refreshButton = self.buttonBox.addButton(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 self.tr("Refresh"), QDialogButtonBox.ButtonRole.ActionRole
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.__refreshButton.setToolTip(self.tr("Press to refresh the status display"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__refreshButton.setEnabled(False)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(False)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setDefault(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.__vcs = vcs
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__process = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__process.finished.connect(self.__procFinished)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__process.readyReadStandardOutput.connect(self.__readStdout)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__process.readyReadStandardError.connect(self.__readStderr)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__initActionsMenu()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 def __initActionsMenu(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Private method to initialize the actions menu.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.__actionsMenu = QMenu()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.__actionsMenu.setTearOffEnabled(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__actionsMenu.setToolTipsVisible(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__actionsMenu.aboutToShow.connect(self.__showActionsMenu)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__addAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.tr("Add..."), self.__worktreeAdd
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__addAct.setToolTip(self.tr("Add a new linked worktree"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__actionsMenu.addSeparator()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.__lockAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.tr("Lock..."), self.__worktreeLock
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.__lockAct.setToolTip(self.tr("Lock the selected worktree"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__unlockAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.tr("Unlock"), self.__worktreeUnlock
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.__unlockAct.setToolTip(self.tr("Unlock the selected worktree"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__actionsMenu.addSeparator()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__moveAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.tr("Move..."), self.__worktreeMove
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.__moveAct.setToolTip(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 self.tr("Move the selected worktree to a new location")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self.__actionsMenu.addSeparator()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.__removeAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 self.tr("Remove"), self.__worktreeRemove
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.__removeAct.setToolTip(self.tr("Remove the selected worktree"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__removeForcedAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.tr("Forced Remove"), self.__worktreeRemoveForced
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__removeForcedAct.setToolTip(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.tr("Remove the selected worktree forcefully")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.__actionsMenu.addSeparator()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__pruneAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.tr("Prune..."), self.__worktreePrune
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__pruneAct.setToolTip(self.tr("Prune worktree information"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__actionsMenu.addSeparator()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.__repairAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.tr("Repair"), self.__worktreeRepair
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.__repairAct.setToolTip(self.tr("Repair worktree administrative files"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.__repairMultipleAct = self.__actionsMenu.addAction(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.tr("Repair Multiple"), self.__worktreeRepairMultiple
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 self.__repairMultipleAct.setToolTip(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 self.tr("Repair administrative files of multiple worktrees")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.actionsButton.setIcon(EricPixmapCache.getIcon("actionsToolButton"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 self.actionsButton.setMenu(self.__actionsMenu)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 def closeEvent(self, e):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 Protected slot implementing a close event handler.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 @param e close event (QCloseEvent)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.__process is not None
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 and self.__process.state() != QProcess.ProcessState.NotRunning
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 ):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.__process.terminate()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 QTimer.singleShot(2000, self.__process.kill)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 self.__process.waitForFinished(3000)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 self.__vcs.getPlugin().setPreferences(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 "WorktreeDialogGeometry", self.saveGeometry()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 e.accept()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 def show(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 Public slot to show the dialog.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 super().show()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 geom = self.__vcs.getPlugin().getPreferences("WorktreeDialogGeometry")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 if geom.isEmpty():
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 s = QSize(900, 600)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.resize(s)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.restoreGeometry(geom)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 def __resort(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 Private method to resort the tree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.worktreeList.sortItems(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 self.worktreeList.sortColumn(),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 self.worktreeList.header().sortIndicatorOrder(),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 def __resizeColumns(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 Private method to resize the list columns.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.worktreeList.header().resizeSections(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 QHeaderView.ResizeMode.ResizeToContents
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.worktreeList.header().setStretchLastSection(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 def __generateItem(self, dataLines):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 Private method to generate a worktree entry with the given data.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 @param dataLines lines extracted from the git worktree list output
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 with porcelain format
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @type list of str
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 checkoutPath = worktreeName = commit = branch = status = ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 iconName = tooltip = ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 for line in dataLines:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 if " " in line:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 option, value = line.split(None, 1)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 option, value = line, ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 if option == "worktree":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 checkoutPath = value
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 worktreeName = os.path.basename(value)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 elif option == "HEAD":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 commit = value[: self.__commitIdLength]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 elif option == "branch":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 branch = value.rsplit("/", 1)[-1]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 elif option == "bare":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 branch = self.tr("(bare)")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 elif option == "detached":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 branch = self.tr("(detached HEAD)")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 elif option == "prunable":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 iconName = "trash"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 tooltip = value
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 status = option
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 elif option == "locked":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 iconName = "locked"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 tooltip = value
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 status = option
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 itm = QTreeWidgetItem(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 self.worktreeList, [worktreeName, checkoutPath, commit, branch]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 if iconName:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 itm.setIcon(0, EricPixmapCache.getIcon(iconName))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 if tooltip:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 itm.setToolTip(0, tooltip)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 if self.worktreeList.topLevelItemCount() == 1:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 # the first item is the main worktree
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 status = "main"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 font = itm.font(0)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 font.setBold(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 if checkoutPath == self.__projectDir:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 # it is the current project as well
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 status = "main+current"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 font.setItalic(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 for col in range(self.worktreeList.columnCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 itm.setFont(col, font)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 elif checkoutPath == self.__projectDir:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 # it is the current project
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 if not status:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 status = "current"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 elif status == "locked":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 status = "locked+current"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 font = itm.font(0)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 font.setItalic(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 for col in range(self.worktreeList.columnCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 itm.setFont(col, font)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 itm.setData(0, GitWorktreeDialog.StatusRole, status)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 def start(self, projectDir):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 Public slot to start the git worktree list command.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 @param projectDir name of the project directory
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 @type str
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.errorGroup.hide()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.worktreeList.clear()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.__ioEncoding = Preferences.getSystem("IOEncoding")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 args = self.__vcs.initCommand("worktree")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 args += ["list", "--porcelain"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 if self.expireCheckBox.isChecked():
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 args += [
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 "--expire",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 self.expireDateTimeEdit.dateTime().toString(Qt.DateFormat.ISODate),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 ]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 self.__projectDir = projectDir
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 # find the root of the repo
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 self.__repodir = self.__vcs.findRepoRoot(projectDir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 if not self.__repodir:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 self.__outputLines = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 self.__commitIdLength = self.__vcs.getPlugin().getPreferences("CommitIdLength")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.__process.kill()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 self.__process.setWorkingDirectory(self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 self.__process.start("git", args)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 procStarted = self.__process.waitForStarted(5000)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 if not procStarted:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 self.tr("Process Generation Error"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 "The process {0} could not be started. "
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 "Ensure, that it is in the search path."
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 ).format("git"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 False
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 True
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setDefault(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 True
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 self.__refreshButton.setEnabled(False)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 def __finish(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 Private slot called when the process finished or the user pressed
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 the button.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 if (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 self.__process is not None
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 and self.__process.state() != QProcess.ProcessState.NotRunning
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 ):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 self.__process.terminate()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 QTimer.singleShot(2000, self.__process.kill)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 self.__process.waitForFinished(3000)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 self.__refreshButton.setEnabled(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setFocus(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 Qt.FocusReason.OtherFocusReason
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 self.__resort()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 self.__resizeColumns()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 @pyqtSlot(QAbstractButton)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 def on_buttonBox_clicked(self, button):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 Private slot called by a button of the button box clicked.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @param button button that was clicked
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 @type QAbstractButton
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 if button == self.buttonBox.button(QDialogButtonBox.StandardButton.Close):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 self.close()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 elif button == self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 self.__finish()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 elif button == self.__refreshButton:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 def __refreshButtonClicked(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 Private slot to refresh the worktree display.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 self.start(self.__projectDir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 def __procFinished(self, exitCode, exitStatus):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 Private slot connected to the finished signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 @param exitCode exit code of the process (integer)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 @param exitStatus exit status of the process (QProcess.ExitStatus)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 self.__finish()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 def __readStdout(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 Private slot to handle the readyReadStandardOutput signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 It reads the output of the process, formats it and inserts it into
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 the contents pane.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 if self.__process is not None:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 self.__process.setReadChannel(QProcess.ProcessChannel.StandardOutput)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 while self.__process.canReadLine():
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 line = str(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 self.__process.readLine(), self.__ioEncoding, "replace"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 ).strip()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 if line:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 self.__outputLines.append(line)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 self.__generateItem(self.__outputLines)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__outputLines = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 def __readStderr(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 Private slot to handle the readyReadStandardError signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 It reads the error output of the process and inserts it into the
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 error pane.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 if self.__process is not None:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 s = str(self.__process.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 self.errorGroup.show()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 self.errors.insertPlainText(s)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 self.errors.ensureCursorVisible()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 @pyqtSlot(bool)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 def on_expireCheckBox_toggled(self, checked):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 Private slot to handle a change of the expire checkbox.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 @param checked state of the checkbox
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 @type bool
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 if checked:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 now = QDateTime.currentDateTime()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 self.expireDateTimeEdit.setMaximumDateTime(now)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 self.expireDateTimeEdit.setMinimumDate(now.date().addDays(-2 * 365))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 self.expireDateTimeEdit.setMinimumTime(QTime(0, 0, 0))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 self.expireDateTimeEdit.setDateTime(now)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 @pyqtSlot(QDateTime)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 def on_expireDateTimeEdit_dateTimeChanged(self, dateTime):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 Private slot to handle a change of the expire date and time.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 @param dateTime DESCRIPTION
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @type QDateTime
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 ###########################################################################
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 ## Menu handling methods
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 ###########################################################################
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 def __showActionsMenu(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 Private slot to prepare the actions button menu before it is shown.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 prunableWorktrees = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 for row in range(self.worktreeList.topLevelItemCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 itm = self.worktreeList.topLevelItem(row)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 status = itm.data(0, GitWorktreeDialog.StatusRole)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 if status == "prunable":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 prunableWorktrees.append(itm.text(self.__pathColumn))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 selectedItems = self.worktreeList.selectedItems()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 enable = bool(selectedItems)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 status = (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 selectedItems[0].data(0, GitWorktreeDialog.StatusRole)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 if selectedItems
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 else ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 self.__lockAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 and status not in ("locked", "locked+current", "main", "main+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 self.__unlockAct.setEnabled(enable and status in ("locked", "locked+current"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 self.__moveAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 and status
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 not in (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 "prunable",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 "locked",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 "main",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 "main+current",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 "current",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 "locked+current",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 self.__removeAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 and status
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 not in ("locked", "main", "main+current", "current", "locked+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 self.__removeForcedAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 and status not in ("main", "main+current", "current", "locked+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 self.__pruneAct.setEnabled(bool(prunableWorktrees))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 def __worktreeAdd(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 Private slot to add a linked worktree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 # TODO: not yet implemented
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483 from .GitWorktreeAddDialog import GitWorktreeAddDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 # find current worktree and take its parent path as the parent directory
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 for row in range(self.worktreeList.topLevelItemCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 itm = self.worktreeList.topLevelItem(row)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 if "current" in itm.data(0, GitWorktreeDialog.StatusRole):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 parentDirectory = os.path.dirname(itm.text(self.__pathColumn))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 break
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 parentDirectory = ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 dlg = GitWorktreeAddDialog(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495 parentDirectory,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 self.__vcs.gitGetTagsList(self.__repodir),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 self.__vcs.gitGetBranchesList(self.__repodir, withMaster=True),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499 if dlg.exec() == QDialog.DialogCode.Accepted:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 params = dlg.getParameters()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501 args = ["worktree", "add"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 if params["force"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 args.append("--force")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504 if params["detach"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505 args.append("--detach")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 if params["lock"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 args.append("--lock")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 if params["lock_reason"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 args += ["--reason", params["lock_reason"]]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 if params["branch"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 args += ["-B" if params["force_branch"] else "-b", params["branch"]]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 args.append(params["path"])
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513 if params["commit"]:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 args.append(params["commit"])
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 dlg = GitDialog(self.tr("Add Worktree"), self.__vcs)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 started = dlg.startProcess(args, workingDir=self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 if started:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 dlg.exec()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 def __worktreeLock(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 Private slot to lock a worktree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 worktree = self.worktreeList.selectedItems()[0].text(self.__pathColumn)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 if not worktree:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 reason, ok = QInputDialog.getText(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 self.tr("Lock Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 self.tr("Enter a reason for the lock:"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 QLineEdit.EchoMode.Normal,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 args = ["worktree", "lock"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542 if reason:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 args += ["--reason", reason]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 args.append(worktree)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 ok = self.__vcs.startSynchronizedProcess(proc, "git", args, self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 self.tr("Lock Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554 "<p>Locking the selected worktree failed.</p><p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 ).format(err),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 def __worktreeUnlock(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 Private slot to unlock a worktree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 worktree = self.worktreeList.selectedItems()[0].text(self.__pathColumn)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 if not worktree:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
569 args = ["worktree", "unlock", worktree]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 ok = self.__vcs.startSynchronizedProcess(proc, "git", args, self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 self.tr("Unlock Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 "<p>Unlocking the selected worktree failed.</p><p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 ).format(err),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 def __worktreeMove(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
587 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
588 Private slot to move a worktree to a new location.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590 worktree = self.worktreeList.selectedItems()[0].text(self.__pathColumn)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
591 if not worktree:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
592 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
594 newPath, ok = EricPathPickerDialog.getStrPath(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
595 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
596 self.tr("Move Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597 self.tr("Enter the new path for the worktree:"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
598 mode=EricPathPickerDialog.EricPathPickerModes.DIRECTORY_MODE,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
599 strPath=worktree,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
600 defaultDirectory=os.path.dirname(worktree),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
601 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
602 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
605 args = ["worktree", "move", worktree, newPath]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
606
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
608 ok = self.__vcs.startSynchronizedProcess(proc, "git", args, self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
609 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
610 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
611 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
612 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
613 self.tr("Move Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
614 self.tr("<p>Moving the selected worktree failed.</p><p>{0}</p>").format(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
615 err
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
616 ),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
617 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
618
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
619 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
620
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
621 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
622 def __worktreeRemove(self, force=False):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
623 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
624 Private slot to remove a linked worktree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
625
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
626 @param force flag indicating a forceful remove (defaults to False)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
627 @type bool (optional
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
628 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
629 worktree = self.worktreeList.selectedItems()[0].text(self.__pathColumn)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
630 if not worktree:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
631 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
632
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
633 title = (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
634 self.tr("Remove Worktree")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
635 if force
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
636 else self.tr("Remove Worktree Forcefully")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
637 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
638
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
639 ok = EricMessageBox.yesNo(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
640 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
641 title,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
642 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
643 "<p>Do you really want to remove the worktree <b>{0}</b>?</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644 ).format(worktree),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
645 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
646 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
647 return
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
648
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
649 args = ["worktree", "remove"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
650 if force:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
651 args.append("--force")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
652 if (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
653 self.worktreeList.selectedItems()[0].data(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
654 0, GitWorktreeDialog.StatusRole
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
655 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
656 == "locked"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
657 ):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
658 # a second '--force' is needed
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
659 args.append("--force")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
660 args.append(worktree)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
661
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
662 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
663 ok = self.__vcs.startSynchronizedProcess(proc, "git", args, self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
664 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
665 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
666 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
667 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
668 title,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
669 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
670 "<p>Removing the selected worktree failed.</p><p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
671 ).format(err),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
672 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
673
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
674 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
675
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
676 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
677 def __worktreeRemoveForced(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
678 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
679 Private slot to remove a linked worktree forcefully.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
680 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
681 self.__worktreeRemove(force=True)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
682
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
683 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
684 def __worktreePrune(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
685 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
686 Private slot to prune worktree information.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
687 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
688 from eric7.UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
689
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
690 prunableWorktrees = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
691 for row in range(self.worktreeList.topLevelItemCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
692 itm = self.worktreeList.topLevelItem(row)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
693 status = itm.data(0, GitWorktreeDialog.StatusRole)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
694 if status == "prunable":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
695 prunableWorktrees.append(itm.text(self.__pathColumn))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
696
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
697 if prunableWorktrees:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
698 dlg = DeleteFilesConfirmationDialog(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
699 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
700 self.tr("Prune Worktree Information"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
701 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
702 "Do you really want to prune the information of these worktrees?"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
703 ),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
704 prunableWorktrees,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
705 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
706 if dlg.exec() == QDialog.DialogCode.Accepted:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
707 args = ["worktree", "prune"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
708 if self.expireCheckBox.isChecked():
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
709 args += [
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
710 "--expire",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
711 self.expireDateTimeEdit.dateTime().toString(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
712 Qt.DateFormat.ISODate
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
713 ),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
714 ]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
715
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
716 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
717 ok = self.__vcs.startSynchronizedProcess(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
718 proc, "git", args, self.__repodir
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
719 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
720 if not ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
721 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
722 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
723 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
724 self.tr("Prune Worktree Information"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
725 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
726 "<p>Pruning of the worktree information failed.</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
727 "<p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
728 ).format(err),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
729 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
730
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
731 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
732
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
733 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
734 def __worktreeRepair(self, worktreePaths=None):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
735 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
736 Private slot to repair worktree administrative files.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
737
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
738 @param worktreePaths list of worktree paths to be repaired (defaults to None)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
739 @type list of str (optional)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
740 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
741 args = ["worktree", "repair"]
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
742 if worktreePaths:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
743 args += worktreePaths
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
744
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
745 proc = QProcess()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
746 ok = self.__vcs.startSynchronizedProcess(proc, "git", args, self.__repodir)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
747 if ok:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
748 out = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
749 EricMessageBox.information(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
750 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
751 self.tr("Repair Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
752 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
753 "<p>Repairing of the worktree administrative files succeeded.</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
754 "<p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
755 ).format(out),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
756 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
757
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
758 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
759 err = str(proc.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
760 EricMessageBox.critical(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
761 self,
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
762 self.tr("Repair Worktree"),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
763 self.tr(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
764 "<p>Repairing of the worktree administrative files failed.</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
765 "<p>{0}</p>"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
766 ).format(err),
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
767 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
768
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
769 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
770
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
771 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
772 def __worktreeRepairMultiple(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
773 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
774 Private slot to repair worktree administrative files for multiple worktree
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
775 paths.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
776 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
777 from .GitWorktreePathsDialog import GitWorktreePathsDialog
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
778
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
779 # find current worktree and take its parent path as the parent directory
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
780 for row in range(self.worktreeList.topLevelItemCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
781 itm = self.worktreeList.topLevelItem(row)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
782 if "current" in itm.data(0, GitWorktreeDialog.StatusRole):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
783 parentDirectory = os.path.dirname(itm.text(self.__pathColumn))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
784 break
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
785 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
786 parentDirectory = ""
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
787
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
788 dlg = GitWorktreePathsDialog(parentDirectory, self)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
789 if dlg.exec() == QDialog.DialogCode.Accepted:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
790 paths = dlg.getPathsList()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
791
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
792 if paths:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
793 self.__worktreeRepair(worktreePaths=paths)

eric ide

mercurial