Skip to content

Commit bb27721

Browse files
committed
GT-3208 Corrected ability to cancel versioned file checkin/checkout.
Strip domain prefix from default user name if present. Other minor usability adjustments.
1 parent dabaa34 commit bb27721

File tree

8 files changed

+46
-14
lines changed

8 files changed

+46
-14
lines changed

Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/BlockStreamServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ public void run() {
314314
": failed to read stream header");
315315
}
316316
else if (!(e instanceof EOFException)) { // silent on closed connection
317-
log.error("file block stream failed from " + socket.getInetAddress(), e);
317+
log.error("file block stream failed from " + socket.getInetAddress() + ": " +
318+
e.getMessage());
318319
}
319320
}
320321
finally {

Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/RemoteInputBlockStreamHandle.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private class ClientInputBlockStream implements InputBlockStream {
6767

6868
@Override
6969
public void close() throws IOException {
70-
socket.getInputStream().close();
70+
in.close();
7171
socket.close();
7272
}
7373

Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/RemoteOutputBlockStreamHandle.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ private class ClientOutputBlockStream implements OutputBlockStream {
6060

6161
ClientOutputBlockStream(Socket socket) throws IOException {
6262
this.socket = socket;
63-
out = compressed ? new DeflaterOutputStream(socket.getOutputStream(),
64-
new Deflater(Deflater.BEST_SPEED)) : socket.getOutputStream();
63+
out = compressed
64+
? new DeflaterOutputStream(socket.getOutputStream(),
65+
new Deflater(Deflater.BEST_SPEED))
66+
: socket.getOutputStream();
6567
}
6668

6769
@Override
@@ -76,7 +78,8 @@ public int getBlockSize() {
7678

7779
@Override
7880
public void close() throws IOException {
79-
socket.getOutputStream().close();
81+
out.close();
82+
socket.close();
8083
}
8184

8285
@Override

Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/ClientUtil.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,13 @@ public static void clearRepositoryAdapter(String host, int port) throws IOExcept
175175
* should be obtained from RepositoryServerAdapter.getUser
176176
*/
177177
public static String getUserName() {
178-
return SystemUtilities.getUserName();
178+
String name = SystemUtilities.getUserName();
179+
// exclude domain prefix which may be included
180+
int slashIndex = name.lastIndexOf('\\');
181+
if (slashIndex >= 0) {
182+
name = name.substring(slashIndex + 1);
183+
}
184+
return name;
179185
}
180186

181187
/**

Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,11 @@ else if (versionedFolderItem instanceof DataFileItem) {
893893
catch (InvalidNameException e) {
894894
throw new AssertException("Unexpected error", e);
895895
}
896+
finally {
897+
if (folderItem == null) {
898+
versionedFolderItem.terminateCheckout(checkout.getCheckoutId(), false);
899+
}
900+
}
896901
folderItem.setCheckout(checkout.getCheckoutId(), exclusive, checkoutVersion,
897902
folderItem.getCurrentVersion());
898903

Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/DeleteProjectFilesTask.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,13 @@ private int showConfirmDeleteVersionedDialog(DomainFile file) {
194194
.addOption("Yes")
195195
.addOption("No")
196196
.addCancel()
197-
.addApplyToAllOption()
198197
.setMessageType(OptionDialog.WARNING_MESSAGE)
199198
;
200199
//@formatter:on
200+
201+
if (getFileCount() > 1) {
202+
versionedDialogBuilder.addApplyToAllOption();
203+
}
201204
}
202205

203206
String msg =
@@ -217,10 +220,13 @@ private void showCheckedOutVersionedDialog(DomainFile file) throws CancelledExce
217220
new OptionDialogBuilder("Delete Not Allowed")
218221
.addOption("OK")
219222
.addCancel()
220-
.addDontShowAgainOption()
221223
.setMessageType(OptionDialog.ERROR_MESSAGE)
222224
;
223225
//@formatter:on
226+
227+
if (getFileCount() > 1) {
228+
checkedOutDialogBuilder.addDontShowAgainOption();
229+
}
224230
}
225231

226232
String msg = "The file \"" + file.getName() +
@@ -240,9 +246,12 @@ private void showFileInUseDialog(DomainFile file) throws CancelledException {
240246
.addOption("OK")
241247
.setMessageType(OptionDialog.ERROR_MESSAGE)
242248
.addCancel()
243-
.addDontShowAgainOption()
244249
;
245250
//@formatter:on
251+
252+
if (getFileCount() > 1) {
253+
fileInUseDialogBuilder.addDontShowAgainOption();
254+
}
246255
}
247256

248257
String msg =
@@ -263,10 +272,13 @@ private int showConfirmReadOnlyDialog(DomainFile file) {
263272
.addOption("No")
264273
.addCancel()
265274
.setMessageType(OptionDialog.WARNING_MESSAGE)
266-
.addApplyToAllOption()
267275
.setDefaultButton("No")
268276
;
269277
//@formatter:on
278+
279+
if (getFileCount() > 1) {
280+
readOnlyDialogBuilder.addApplyToAllOption();
281+
}
270282
}
271283

272284
String msg = "The file \"" + file.getName() +

Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlUndoCheckOutAction.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import ghidra.framework.main.datatree.UndoActionDialog;
2929
import ghidra.framework.model.DomainFile;
3030
import ghidra.framework.plugintool.Plugin;
31+
import ghidra.util.Msg;
3132
import ghidra.util.exception.CancelledException;
33+
import ghidra.util.exception.FileInUseException;
3234
import ghidra.util.task.Task;
3335
import ghidra.util.task.TaskMonitor;
3436
import resources.ResourceManager;
@@ -177,6 +179,10 @@ public void run(TaskMonitor monitor) {
177179
catch (CancelledException e) {
178180
tool.setStatusInfo("Undo check out was canceled");
179181
}
182+
catch (FileInUseException e) {
183+
Msg.showError(this, null, "Action Failed",
184+
"Unable to Undo Checkout while file(s) are open or in use");
185+
}
180186
catch (IOException e) {
181187
ClientUtil.handleException(repository, e, "Undo Check Out", tool.getToolFrame());
182188
}

Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/server/RepositoryTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,16 @@
1515
*/
1616
package ghidra.server;
1717

18-
import static org.junit.Assert.assertEquals;
19-
import static org.junit.Assert.assertNotNull;
18+
import static org.junit.Assert.*;
2019

2120
import java.io.File;
2221

2322
import org.junit.*;
2423

24+
import ghidra.framework.client.ClientUtil;
2525
import ghidra.framework.remote.User;
2626
import ghidra.test.AbstractGhidraHeadedIntegrationTest;
2727
import ghidra.util.NamingUtilities;
28-
import ghidra.util.SystemUtilities;
2928
import ghidra.util.exception.UserAccessException;
3029
import utilities.util.FileUtilities;
3130

@@ -41,7 +40,7 @@ public class RepositoryTest extends AbstractGhidraHeadedIntegrationTest {
4140
@Before
4241
public void setUp() throws Exception {
4342

44-
userName = SystemUtilities.getUserName();
43+
userName = ClientUtil.getUserName();
4544

4645
File parent = createTempDirectory(getClass().getSimpleName());
4746

0 commit comments

Comments
 (0)