Skip to content
Snippets Groups Projects
Commit 8bc31051 authored by George Nachman's avatar George Nachman
Browse files

Remove mechanism for catching proc_pidinfo and statfs timeouts. It was causing...

Remove mechanism for catching proc_pidinfo and statfs timeouts. It was causing crashes, but I don't understand why. Perhaps mixing ARC and non-ARC code has some problem? I saw lots of crashes on 3.1.4 where proc_pidinfo exceeded the timeout and when it finally returned there was heap corruption. It looked as though the dispatch group had been freed even though there was an outstanding reference to it. At any rate, if proc_pidinfo is hanging you're going to have a bad time even without this workaround.
parent 26838c29
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -1267,8 +1267,6 @@
A61D16FC1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; };
A61D16FD1AAFD5530013FCCA /* iTermBackgroundColorRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A61D16FA1AAFD5530013FCCA /* iTermBackgroundColorRun.h */; };
A61F8E301E62591800D315D0 /* iTermFakeUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */; };
A623D9471F8972750011F8C3 /* iTermCallWithTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */; };
A623D9481F8972750011F8C3 /* iTermCallWithTimeout.m in Sources */ = {isa = PBXBuildFile; fileRef = A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */; };
A623D94B1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
A623D94C1F8984690011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
A623D94D1F89846A0011F8C3 /* key.png in Resources */ = {isa = PBXBuildFile; fileRef = A623D9491F8983D70011F8C3 /* key.png */; };
Loading
Loading
@@ -3251,8 +3249,6 @@
A61D16FB1AAFD5530013FCCA /* iTermBackgroundColorRun.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermBackgroundColorRun.m; sourceTree = "<group>"; };
A61F8E2E1E62591800D315D0 /* iTermFakeUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTermFakeUserDefaults.h; sourceTree = "<group>"; };
A61F8E2F1E62591800D315D0 /* iTermFakeUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTermFakeUserDefaults.m; sourceTree = "<group>"; };
A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iTermCallWithTimeout.h; sourceTree = "<group>"; };
A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iTermCallWithTimeout.m; sourceTree = "<group>"; };
A623D9491F8983D70011F8C3 /* key.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = key.png; path = images/key.png; sourceTree = "<group>"; };
A623D94A1F8983D80011F8C3 /* key@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "key@2x.png"; path = "images/key@2x.png"; sourceTree = "<group>"; };
A624230F19CF6B0C00182C08 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ThirdParty/Sparkle.framework; sourceTree = "<group>"; };
Loading
Loading
@@ -5738,8 +5734,6 @@
A65EC02E1F31800300AC0A6B /* iTermUpdateCadenceController.m */,
A65EC0311F3181E700AC0A6B /* NSTimer+iTerm.h */,
A65EC0321F3181E700AC0A6B /* NSTimer+iTerm.m */,
A623D9451F8972750011F8C3 /* iTermCallWithTimeout.h */,
A623D9461F8972750011F8C3 /* iTermCallWithTimeout.m */,
);
name = Helpers;
sourceTree = "<group>";
Loading
Loading
@@ -6885,7 +6879,6 @@
A667193D1DCE36C3000CE608 /* iTermHotkeyPreferencesModel.h in Headers */,
A667193E1DCE36C3000CE608 /* NSLocale+iTerm.h in Headers */,
A667193F1DCE36C3000CE608 /* iTermDirectoryTree.h in Headers */,
A623D9471F8972750011F8C3 /* iTermCallWithTimeout.h in Headers */,
A66719401DCE36C3000CE608 /* iTermOpenQuicklyCommands.h in Headers */,
A62A1F761E711BC000363EE9 /* iTermHelpMessageViewController.h in Headers */,
A66719411DCE36C3000CE608 /* iTermSystemVersion.h in Headers */,
Loading
Loading
@@ -8428,7 +8421,6 @@
A65EC0301F31800300AC0A6B /* iTermUpdateCadenceController.m in Sources */,
A66719661DCE3772000CE608 /* iTermWebSocketFrame.m in Sources */,
A65EC0341F3181E700AC0A6B /* NSTimer+iTerm.m in Sources */,
A623D9481F8972750011F8C3 /* iTermCallWithTimeout.m in Sources */,
A66EF82D1EF59CFC0005891A /* iTermRateLimitedUpdate.m in Sources */,
A66719601DCE3772000CE608 /* iTermAPIServer.m in Sources */,
A60BB38F1EB6A08A00D76C09 /* iTermProcessCollection.m in Sources */,
Loading
Loading
@@ -40,13 +40,6 @@
}
 
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory {
BOOL timedOut;
return [self fileExistsAtPath:path isDirectory:isDirectory timedOut:&timedOut];
}
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory timedOut:(BOOL *)timedOut {
*timedOut = NO;
if ([_files containsObject:path]) {
if (isDirectory) {
*isDirectory = NO;
Loading
Loading
@@ -65,8 +58,7 @@
}
 
- (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths
timedOut:(BOOL *)timedOutPtr {
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths {
NSMutableArray *networkPaths = [[_networkMountPoints mutableCopy] autorelease];
[networkPaths addObjectsFromArray:additionalNetworkPaths];
for (NSString *networkPath in networkPaths) {
Loading
Loading
@@ -79,8 +71,7 @@
}
 
- (BOOL)fileExistsAtPath:(NSString *)path {
BOOL timedOut;
return [self fileExistsAtPath:path isDirectory:NULL timedOut:&timedOut];
return [self fileExistsAtPath:path isDirectory:NULL];
}
 
@end
Loading
Loading
@@ -178,21 +169,17 @@
#pragma mark - Get Full Path
 
- (void)testGetFullPathFailsOnNil {
BOOL timedOut;
XCTAssert([_semanticHistoryController getFullPath:nil
workingDirectory:@"/"
lineNumber:NULL
columnNumber:NULL
timedOut:&timedOut] == nil);
columnNumber:NULL] == nil);
}
 
- (void)testGetFullPathFailsOnEmpty {
BOOL timedOut;
XCTAssert([_semanticHistoryController getFullPath:@""
workingDirectory:@"/"
lineNumber:NULL
columnNumber:NULL
timedOut:&timedOut] == nil);
columnNumber:NULL] == nil);
}
 
- (void)testGetFullPathFindsExistingFileAtAbsolutePath {
Loading
Loading
@@ -201,12 +188,10 @@
static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -220,12 +205,10 @@
NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -239,12 +222,10 @@
NSString *kFilenameWithParens = [NSString stringWithFormat:@"%C%@%C", [delimiters characterAtIndex:0], kFilename, [delimiters characterAtIndex:1]];
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
assert([expected isEqualToString:actual]);
assert(lineNumber.length == 0);
Loading
Loading
@@ -259,12 +240,10 @@
NSString *kFilenameWithParens = [kFilename stringByAppendingString:punctuation];
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -278,12 +257,10 @@
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -296,12 +273,10 @@
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123:456"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -314,12 +289,10 @@
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [NSString stringWithFormat:@"(%@:123.)", kFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -330,12 +303,10 @@
NSString *columnNumber = nil;
static NSString *const kWorkingDirectory = @"/working/directory";
static NSString *const kFilename = @"(:123.)";
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
XCTAssert(actual == nil);
}
 
Loading
Loading
@@ -347,12 +318,10 @@
NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
[_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/./path/to/file"];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -366,12 +335,10 @@
NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
[_semanticHistoryController.fakeFileManager.files addObject:@"/working/directory/blah/../path/to/file"];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -385,12 +352,10 @@
NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:[@"a/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -404,12 +369,10 @@
NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:[@"b/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -423,12 +386,10 @@
NSString *kAbsoluteFilename =
[kWorkingDirectory stringByAppendingPathComponent:kRelativeFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
BOOL timedOut;
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
 
Loading
Loading
@@ -436,8 +397,7 @@
actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
XCTAssert(actual == nil);
}
 
Loading
Loading
Loading
Loading
@@ -37,8 +37,7 @@
 
// Returns YES if the file exists on a local (non-network) filesystem.
- (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths
timedOut:(BOOL *)timedOut;
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths;
 
- (BOOL)fileHasForbiddenPrefix:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkpaths;
Loading
Loading
Loading
Loading
@@ -25,7 +25,6 @@
#import "NSFileManager+iTerm.h"
 
#import "iTermAdvancedSettingsModel.h"
#import "iTermCallWithTimeout.h"
#import "DebugLogging.h"
#import "iTermAdvancedSettingsModel.h"
#import "iTermAutoMasterParser.h"
Loading
Loading
@@ -228,32 +227,20 @@ NSString * const DirectoryLocationDomain = @"DirectoryLocationDomain";
}
 
- (BOOL)fileExistsAtPathLocally:(NSString *)filename
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths
timedOut:(BOOL *)timedOutPtr {
additionalNetworkPaths:(NSArray<NSString *> *)additionalNetworkPaths {
if ([self fileHasForbiddenPrefix:filename additionalNetworkPaths:additionalNetworkPaths]) {
return NO;
}
 
__block BOOL ok = NO;
[filename retain];
BOOL timedOut =
[[iTermCallWithTimeout instanceForIdentifier:@"statfs"] executeWithTimeout:0.5 block:^{
struct statfs buf;
int rc = statfs([filename UTF8String], &buf);
if (rc != 0 || (buf.f_flags & MNT_LOCAL)) {
ok = [self fileExistsAtPath:filename];
} else {
ok = NO;
}
[filename release];
}];
if (timedOutPtr) {
*timedOutPtr = timedOut;
BOOL ok;
struct statfs buf;
int rc = statfs([filename UTF8String], &buf);
if (rc != 0 || (buf.f_flags & MNT_LOCAL)) {
ok = [self fileExistsAtPath:filename];
} else {
ok = NO;
}
if (timedOut) {
DLog(@"Timed out doing statfs on %@", filename);
}
return timedOut ? NO : ok;
return ok;
}
 
@end
Loading
Loading
//
// iTermCallWithTimeout.h
// iTerm2SharedARC
//
// Created by George Nachman on 10/7/17.
//
#import <Foundation/Foundation.h>
@interface iTermCallWithTimeout : NSObject
+ (instancetype)instanceForIdentifier:(NSString *)identifier;
- (BOOL)executeWithTimeout:(NSTimeInterval)timeout
block:(void (^)(void))block;
@end
//
// iTermCallWithTimeout.m
// iTerm2SharedARC
//
// Created by George Nachman on 10/7/17.
//
#import "iTermCallWithTimeout.h"
@implementation iTermCallWithTimeout {
dispatch_queue_t _queue;
}
+ (instancetype)instanceForIdentifier:(NSString *)identifier {
static NSMutableDictionary *objects;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
objects = [NSMutableDictionary dictionary];
});
iTermCallWithTimeout *object = objects[identifier];
if (object == nil) {
object = [[self alloc] initWithIdentifier:identifier];
objects[identifier] = object;
}
return object;
}
- (instancetype)initWithIdentifier:(NSString *)identifier {
self = [super init];
if (self) {
_queue = dispatch_queue_create([[NSString stringWithFormat:@"com.iterm2.timeoutcall.%@", identifier] UTF8String],
NULL);
}
return self;
}
- (BOOL)executeWithTimeout:(NSTimeInterval)timeout block:(void (^)(void))block {
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
dispatch_async(_queue, ^{
block();
dispatch_group_leave(group);
});
// Wait up to half a second for the statfs to finish.
long timedOut = dispatch_group_wait(group,
dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)));
return !!timedOut;
}
@end
Loading
Loading
@@ -8,7 +8,6 @@
 
#import "iTermLSOF.h"
 
#import "iTermCallWithTimeout.h"
#import "iTermSocketAddress.h"
#import "ProcessCache.h"
#include <arpa/inet.h>
Loading
Loading
@@ -19,11 +18,7 @@
#include <sys/sysctl.h>
 
int iTermProcPidInfoWrapper(int pid, int flavor, uint64_t arg, void *buffer, int buffersize) {
__block int result;
BOOL timeout = [[iTermCallWithTimeout instanceForIdentifier:@"pidinfo"] executeWithTimeout:0.5 block:^{
result = proc_pidinfo(pid, flavor, arg, buffer, buffersize);
}];
return timeout ? -1 : result;
return proc_pidinfo(pid, flavor, arg, buffer, buffersize);
}
 
@implementation iTermLSOF {
Loading
Loading
Loading
Loading
@@ -48,8 +48,7 @@ extern NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey;
- (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber
timedOut:(BOOL *)timedOut;
columnNumber:(NSString **)columnNumber;
 
// Opens the file at the relative |path| (which may include :lineNumber) in |workingDirectory|.
// The |substitutions| dictionary is used to expand \references in the command to run (gotten from
Loading
Loading
Loading
Loading
@@ -43,10 +43,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
@synthesize prefs = prefs_;
@synthesize delegate = delegate_;
 
- (BOOL)fileExistsAtPathLocally:(NSString *)path timedOut:(BOOL *)timedOut {
- (BOOL)fileExistsAtPathLocally:(NSString *)path {
return [self.fileManager fileExistsAtPathLocally:path
additionalNetworkPaths:[[iTermAdvancedSettingsModel pathsToIgnore] componentsSeparatedByString:@","]
timedOut:timedOut];
additionalNetworkPaths:[[iTermAdvancedSettingsModel pathsToIgnore] componentsSeparatedByString:@","]];
}
 
- (BOOL)fileHasForbiddenPrefix:(NSString *)path {
Loading
Loading
@@ -57,10 +56,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
- (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber
timedOut:(BOOL *)timedOut {
columnNumber:(NSString **)columnNumber {
DLog(@"Check if %@ is a valid path in %@", path, workingDirectory);
*timedOut = NO;
NSString *origPath = path;
// TODO(chendo): Move regex, define capture semantics in config file/prefs
if (!path || [path length] == 0) {
Loading
Loading
@@ -107,7 +104,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
// be stat()ed, although they were always stat()ed because of unintentional
// disk access in the old code.
 
if ([self fileExistsAtPathLocally:path timedOut:timedOut]) {
if ([self fileExistsAtPathLocally:path]) {
DLog(@" YES: A file exists at %@", path);
NSURL *url = [NSURL fileURLWithPath:path];
 
Loading
Loading
@@ -120,11 +117,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
return nil;
}
return path;
} else if (*timedOut) {
DLog(@" NO: timed out");
return nil;
}
// If path doesn't exist and it starts with "a/" or "b/" (from `diff`).
if ([origPath isMatchedByRegex:@"^[ab]/"]) {
DLog(@" Treating as diff path");
Loading
Loading
@@ -136,8 +129,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
return [self getFullPath:origPath
workingDirectory:workingDirectory
lineNumber:lineNumber
columnNumber:columnNumber
timedOut:timedOut];
columnNumber:columnNumber];
}
 
DLog(@" NO: no valid path found");
Loading
Loading
@@ -338,11 +330,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
 
BOOL isRawAction = [prefs_[kSemanticHistoryActionKey] isEqualToString:kSemanticHistoryRawCommandAction];
if (!isRawAction) {
BOOL timedOut;
path = [self getFullPath:path workingDirectory:workingDirectory
lineNumber:&lineNumber
columnNumber:&columnNumber
timedOut:&timedOut];
columnNumber:&columnNumber];
DLog(@"Not a raw action. New path is %@, line number is %@", path, lineNumber);
}
 
Loading
Loading
@@ -455,8 +445,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
charsTakenFromPrefix:(int *)charsTakenFromPrefixPtr
charsTakenFromSuffix:(int *)suffixChars
trimWhitespace:(BOOL)trimWhitespace {
BOOL timedOut;
BOOL workingDirectoryIsOk = [self fileExistsAtPathLocally:workingDirectory timedOut:&timedOut];
BOOL workingDirectoryIsOk = [self fileExistsAtPathLocally:workingDirectory];
if (!workingDirectoryIsOk) {
DLog(@"Working directory %@ is a network share or doesn't exist. Not using it for context.",
workingDirectory);
Loading
Loading
@@ -519,16 +508,10 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
for (NSString *modifiedPossiblePath in [self pathsFromPath:trimmedPath byRemovingBadSuffixes:questionableSuffixes]) {
BOOL exists = NO;
if (workingDirectoryIsOk || [modifiedPossiblePath hasPrefix:@"/"]) {
BOOL timedOut = NO;
exists = ([self getFullPath:modifiedPossiblePath
workingDirectory:workingDirectory
lineNumber:NULL
columnNumber:NULL
timedOut:&timedOut] != nil);
if (timedOut) {
DLog(@"Timed out checking path %@ in %@", modifiedPossiblePath, workingDirectory);
return nil;
}
columnNumber:NULL] != nil);
}
if (exists) {
if (charsTakenFromPrefixPtr) {
Loading
Loading
Loading
Loading
@@ -196,12 +196,10 @@
range.columnWindow = extractor.logicalWindow;
action.range = range;
 
BOOL timedOut;
action.fullPath = [semanticHistoryController getFullPath:filename
workingDirectory:workingDirectory
lineNumber:NULL
columnNumber:NULL
timedOut:&timedOut];
columnNumber:NULL];
action.workingDirectory = workingDirectory;
return action;
}
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment