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

Wed, 04 Oct 2023 17:50:59 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 04 Oct 2023 17:50:59 +0200
branch
eric7
changeset 10217
7888177e7463
parent 10069
435cc5875135
child 10438
4cd7e5a8b3cf
permissions
-rw-r--r--

Fixed in issue with several editable combo box selectors, that the value could not be changed if the edited text differed by case only. This was caused by the standard QComboBox completer.

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
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9621
diff changeset
3 # Copyright (c) 2022 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
9620
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
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9971
diff changeset
357 @pyqtSlot(int, QProcess.ExitStatus)
9620
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 def __procFinished(self, exitCode, exitStatus):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 Private slot connected to the finished signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 @param exitCode exit code of the process (integer)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 @param exitStatus exit status of the process (QProcess.ExitStatus)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 self.__finish()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 def __readStdout(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 Private slot to handle the readyReadStandardOutput signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 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
372 the contents pane.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 if self.__process is not None:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 self.__process.setReadChannel(QProcess.ProcessChannel.StandardOutput)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 while self.__process.canReadLine():
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 line = str(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 self.__process.readLine(), self.__ioEncoding, "replace"
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 ).strip()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 if line:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 self.__outputLines.append(line)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__generateItem(self.__outputLines)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 self.__outputLines = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 def __readStderr(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 Private slot to handle the readyReadStandardError signal.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 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
392 error pane.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 if self.__process is not None:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 s = str(self.__process.readAllStandardError(), self.__ioEncoding, "replace")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 self.errorGroup.show()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 self.errors.insertPlainText(s)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 self.errors.ensureCursorVisible()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 @pyqtSlot(bool)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 def on_expireCheckBox_toggled(self, checked):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 Private slot to handle a change of the expire checkbox.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 @param checked state of the checkbox
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 @type bool
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 if checked:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 now = QDateTime.currentDateTime()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 self.expireDateTimeEdit.setMaximumDateTime(now)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 self.expireDateTimeEdit.setMinimumDate(now.date().addDays(-2 * 365))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 self.expireDateTimeEdit.setMinimumTime(QTime(0, 0, 0))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 self.expireDateTimeEdit.setDateTime(now)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 else:
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 self.__refreshButtonClicked()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 @pyqtSlot(QDateTime)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 def on_expireDateTimeEdit_dateTimeChanged(self, dateTime):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 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
421
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @param dateTime DESCRIPTION
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 @type QDateTime
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 self.__refreshButtonClicked()
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 ###########################################################################
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 ## Menu handling methods
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
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 def __showActionsMenu(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 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
434 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 prunableWorktrees = []
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 for row in range(self.worktreeList.topLevelItemCount()):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 itm = self.worktreeList.topLevelItem(row)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 status = itm.data(0, GitWorktreeDialog.StatusRole)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 if status == "prunable":
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 prunableWorktrees.append(itm.text(self.__pathColumn))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 selectedItems = self.worktreeList.selectedItems()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 enable = bool(selectedItems)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 status = (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 selectedItems[0].data(0, GitWorktreeDialog.StatusRole)
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 if selectedItems
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 else ""
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
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 self.__lockAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 and status not in ("locked", "locked+current", "main", "main+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 self.__unlockAct.setEnabled(enable and status in ("locked", "locked+current"))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 self.__moveAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 and status
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 not in (
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 "prunable",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 "locked",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 "main",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 "main+current",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 "current",
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 "locked+current",
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 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 self.__removeAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 and status
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 not in ("locked", "main", "main+current", "current", "locked+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 self.__removeForcedAct.setEnabled(
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 enable
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 and status not in ("main", "main+current", "current", "locked+current")
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 )
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 self.__pruneAct.setEnabled(bool(prunableWorktrees))
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 @pyqtSlot()
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 def __worktreeAdd(self):
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 """
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 Private slot to add a linked worktree.
9563c83ce83d Version Control Systems - git
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 """
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),
9971
773ad1f1ed22 Performed some 'ethical' changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
497 self.__vcs.gitGetBranchesList(self.__repodir),
9620
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