Fixed: XCodeCapp reads the user's shell environment

Before this fix, XCodeCapp always ran under /bin/bash, causing problems when trying to source the files from other shells, like /bin/zsh

This fix reads the shell information directly from the user's environment and XCC to run using that shell.
This commit is contained in:
Andrew Hankinson committed 2013-01-09 11:27:47 -05:00
1 parent 6284f29a96
commit 0f9a2dc9d3
2 files changed
+50 -14

No files matched your search

+49 -13
View File
@@ -73,23 +73,59 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
[self configure];
if([fm fileExistsAtPath:[@"~/.bash_profile" stringByExpandingTildeInPath]])
profilePath = [@"source ~/.bash_profile" stringByExpandingTildeInPath];
else if([fm fileExistsAtPath:[@"~/.profile" stringByExpandingTildeInPath]])
profilePath = [@"source ~/.profile" stringByExpandingTildeInPath];
else if([fm fileExistsAtPath:[@"~/.bashrc" stringByExpandingTildeInPath]])
profilePath = [@"source ~/.bashrc" stringByExpandingTildeInPath];
else if([fm fileExistsAtPath:[@"~/.zshrc" stringByExpandingTildeInPath]])
profilePath = [@"source ~/.zshrc" stringByExpandingTildeInPath];
NSString* myShell = [[[NSProcessInfo processInfo] environment] objectForKey:@"SHELL"];
if (myShell)
{
shellPath = myShell;
}
else
{
NSAlert *alert = [NSAlert alertWithMessageText:@"Cannot find any valid profile file."
shellPath = @"/bin/bash";
}
if([shellPath isEqualToString:@"/bin/bash"])
{
if([fm fileExistsAtPath:[@"~/.bash_profile" stringByExpandingTildeInPath]])
{
profilePath = [@"source ~/.bash_profile" stringByExpandingTildeInPath];
}
else if([fm fileExistsAtPath:[@"~/.bashrc" stringByExpandingTildeInPath]])
{
profilePath = [@"source ~/.bashrc" stringByExpandingTildeInPath];
}
else if([fm fileExistsAtPath:[@"~/.profile" stringByExpandingTildeInPath]])
{
profilePath = [@"source ~/.profile" stringByExpandingTildeInPath];
}
else
{
profilePath = @"";
}
}
else if ([shellPath isEqualToString:@"/bin/zsh"])
if([fm fileExistsAtPath:[@"~/.zshrc" stringByExpandingTildeInPath]])
{
profilePath = [@"source ~/.zshrc" stringByExpandingTildeInPath];
}
else if([fm fileExistsAtPath:[@"~/.profile" stringByExpandingTildeInPath]])
{
profilePath = [@"source ~/.profile" stringByExpandingTildeInPath];
}
else
{
profilePath = @"";
}
else
{
NSAlert *alert = [NSAlert alertWithMessageText:@"Shell not recognized."
defaultButton:@"OK"
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"Neither ~/.bash_profile, ~/.profile, ~/.bashrc nor ~/.zshrc can be found.\n\nWithout this XcodeCapp cannot locate nib2cib.\n\nIf you notice any errors or strange behaviour, please look at the system log for messages and open a ticket."];
informativeTextWithFormat:@"You are running %@ as your shell, which is not supported. Please change your shell to either BASH or ZSH.", shellPath];
[alert runModal];
profilePath = @"";
profilePath = @"";
}
}
@@ -415,8 +451,8 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
NSNumber *status;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/bash"];
[task setLaunchPath:shellPath];
[task setArguments: arguments];
[task setStandardOutput:[NSPipe pipe]];
[task launch];