diff --git a/python/commit.py b/python/commit.py index 4d0a005..6acbb3c 100644 --- a/python/commit.py +++ b/python/commit.py @@ -27,8 +27,10 @@ if not os.path.exists(commitfile):raise Exception("Gitty Error: The tmp commitmsg file doesn't exist.") signoff=False if options.misc and len(options.misc)>0: signoff=True - if signoff: command="%s %s %s"%(options.git,"commit -s -F",commitfile) - else: command="%s %s %s"%(options.git,"commit -F",commitfile) + if signoff: command="%s %s %s"%(options.git,"commit -s -F ",commitfile) + else: command="%s %s %s"%(options.git,"commit -F ",commitfile) + + if checkfiles(options): command+=" "+make_file_list_for_git(options.files) rcode,stout,sterr=run_command(command) rcode_for_git_exit(rcode,sterr) exit(0) diff --git a/src/GTCommitMessageController.h b/src/GTCommitMessageController.h index b6dd23c..18bb2b4 100644 --- a/src/GTCommitMessageController.h +++ b/src/GTCommitMessageController.h @@ -31,6 +31,7 @@ IBOutlet NSButton * signoff; NSString * commitMessageValue; BOOL addBeforeCommit; + NSArray * fileSelection; } @property (readonly,nonatomic) NSString * commitMessageValue; @@ -39,5 +40,6 @@ - (void) focus; - (BOOL) shouldSignoff; - (void) updateMessageFieldAttributes; +- (void) finishTwoStageCommit; @end diff --git a/src/GTCommitMessageController.m b/src/GTCommitMessageController.m index 9514c9e..5dc32d8 100644 --- a/src/GTCommitMessageController.m +++ b/src/GTCommitMessageController.m @@ -106,17 +106,24 @@ - (void) onok:(id) sender { commitMessageValue = [val copy]; if(target) [target performSelector:action]; - //[operations runCommitOperation]; - //[self disposeNibs]; + fileSelection = [[[gd activeBranchView] selectedFiles] copy]; if (addBeforeCommit) [operations runAddFilesOperation]; else { - [operations runCommitOperation]; - [self disposeNibs]; + [self finishTwoStageCommit]; } } +- (void) finishTwoStageCommit { + if ([gd.gitd stagedFilesCount] >= 1) + [operations runCommitOperationWithFiles:fileSelection]; + else + NSBeep(); + self.addBeforeCommit = false; + [self disposeNibs]; +} + - (BOOL) shouldSignoff { return [signoff state]; } @@ -130,6 +137,8 @@ - (void) loadNibs { - (void) disposeNibs { label=nil; messageField=nil; + [fileSelection release]; + fileSelection = nil; GDRelease(commitMessageValue); [super disposeNibs]; } diff --git a/src/GTOpCommit.h b/src/GTOpCommit.h index 8c18fb6..50691f0 100644 --- a/src/GTOpCommit.h +++ b/src/GTOpCommit.h @@ -21,4 +21,6 @@ @interface GTOpCommit : GTBasePythonTaskOperation { } +- (id) initWithGD:(GittyDocument *) _gd andFiles:(NSArray *)files; + @end diff --git a/src/GTOpCommit.m b/src/GTOpCommit.m index c5f5d46..fd59e71 100644 --- a/src/GTOpCommit.m +++ b/src/GTOpCommit.m @@ -18,9 +18,23 @@ #import "GTOpCommit.h" #import "GittyDocument.h" +@interface GTOpCommit(internal) +- (void) setArgumentsAndFiles:(NSArray *)files; +@end + @implementation GTOpCommit -- (void) setArguments { +- (id) initWithGD:(GittyDocument *) _gd andFiles:(NSArray *)files { + if(self=[super initWithGD:_gd]) { + args=[[NSMutableArray alloc] init]; + readsSTDERR=true; + [self initializeTask]; + [self setArgumentsAndFiles:files]; + } + return self; +} + +- (void) setArgumentsAndFiles:(NSArray *)files { if([self isCancelled]) return; [self setArgumentsWithPythonScript:[GTPythonScripts commitScript] setArgsOnTask:false]; if([self isCancelled]) return; @@ -31,7 +45,16 @@ - (void) setArguments { [fileHandle writeData:commitMessage]; [fileHandle release]; if([[gd commit] shouldSignoff]) [args addObject:@"-m1"]; + if (files && [files count] > 0) { + for (int i = 0; i < [files count]; i++) { + [args addObject:[@"-f " stringByAppendingString:[files objectAtIndex:i]]]; + } + } [task setArguments:args]; } +- (void) setArguments { + [self setArgumentsAndFiles:nil]; +} + @end diff --git a/src/GTOperationsController.h b/src/GTOperationsController.h index 9541beb..1b29d20 100644 --- a/src/GTOperationsController.h +++ b/src/GTOperationsController.h @@ -140,6 +140,7 @@ - (void) runRefreshStatusOperation; - (void) runAddFilesOperation; - (void) runCommitOperation; +- (void) runCommitOperationWithFiles:(NSArray *)files; - (void) runRemoveFilesOperation; - (void) runDestageOperation; - (void) runDiscardChangesOperation; diff --git a/src/GTOperationsController.m b/src/GTOperationsController.m index 0d32ca1..9589924 100644 --- a/src/GTOperationsController.m +++ b/src/GTOperationsController.m @@ -225,6 +225,19 @@ - (void) runAddFilesOperation { }]; } +- (void) runCommitOperationWithFiles:(NSArray *)files { + if(allCanceled) return; + if(isRunningCommit) return; + isRunningCommit=true; + [status showSpinner]; + GTOpCommit * commit = [[[GTOpCommit alloc] initWithGD:gd andFiles:files] autorelease]; + NSOperationQueue * q = [self createCancelableQueueWithOperation:commit]; + [commit setCompletionBlock:^{ + [self releaseAndRemoveQFromCancelables:q]; + [self onCommitComplete]; + }]; +} + - (void) runCommitOperation { if(allCanceled) return; if(isRunningCommit) return; diff --git a/src/GittyDocument.m b/src/GittyDocument.m index 1202427..09e9fac 100644 --- a/src/GittyDocument.m +++ b/src/GittyDocument.m @@ -512,19 +512,8 @@ - (void) onRefreshOperationComplete { [mainMenuHelper invalidate]; [contextMenus invalidate]; //[self adjustMinWindowSize]; - /*if(commitAfterAdd) { - [commit focus]; - commitAfterAdd=false; - }*/ if (commit.addBeforeCommit) - { - if([gitd stagedFilesCount] >= 1) - [operations runCommitOperation]; - else - NSBeep(); - commit.addBeforeCommit = false; - [commit disposeNibs]; - } + [commit finishTwoStageCommit]; [sourceListView update]; // update the history... [historyView invalidate];