Add Add Remote

- Add Remote in the Repository menu
    - an Add Remote Sheet
This commit is contained in:
Nathan Kinsinger
2010-02-13 09:28:54 -07:00
parent 6e405972e8
commit fe5dddc681
9 changed files with 1539 additions and 3 deletions
+48 -3
View File
@@ -666,6 +666,15 @@
<reference key="NSOnImage" ref="889736156"/>
<reference key="NSMixedImage" ref="37108609"/>
</object>
<object class="NSMenuItem" id="173376826">
<reference key="NSMenu" ref="944982980"/>
<string key="NSTitle">Add Remote</string>
<string key="NSKeyEquiv">r</string>
<int key="NSKeyEquivModMask">1572864</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="889736156"/>
<reference key="NSMixedImage" ref="37108609"/>
</object>
<object class="NSMenuItem" id="255856917">
<reference key="NSMenu" ref="944982980"/>
<bool key="NSIsDisabled">YES</bool>
@@ -1315,6 +1324,14 @@
</object>
<int key="connectionID">950</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showAddRemoteSheet:</string>
<reference key="source" ref="954860085"/>
<reference key="destination" ref="173376826"/>
</object>
<int key="connectionID">953</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -1978,6 +1995,7 @@
<reference ref="255856917"/>
<reference ref="950917510"/>
<reference ref="416044880"/>
<reference ref="173376826"/>
</object>
<reference key="parent" ref="571164270"/>
</object>
@@ -2006,6 +2024,11 @@
<reference key="object" ref="416044880"/>
<reference key="parent" ref="944982980"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">951</int>
<reference key="object" ref="173376826"/>
<reference key="parent" ref="944982980"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -2204,6 +2227,7 @@
<string>943.IBPluginDependency</string>
<string>947.IBPluginDependency</string>
<string>949.IBPluginDependency</string>
<string>951.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -2392,7 +2416,8 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{668, 643}, {192, 93}}</string>
<string>{{668, 623}, {206, 113}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2417,7 +2442,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">950</int>
<int key="maxID">953</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -2650,13 +2675,13 @@
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>createBranch:</string>
<string>createTag:</string>
<string>openFilesAction:</string>
<string>openSelectedFile:</string>
<string>refresh:</string>
<string>setDetailedView:</string>
<string>setRawView:</string>
<string>setTreeView:</string>
<string>showAddRemoteSheet:</string>
<string>showCommitsFromTree:</string>
<string>showInFinderAction:</string>
<string>toggleQuickView:</string>
@@ -2835,10 +2860,20 @@
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>changeBranch:</string>
<string>checkout:</string>
<string>cherryPick:</string>
<string>copyPatch:</string>
<string>copySHA:</string>
<string>createBranch:</string>
<string>createTag:</string>
<string>fetchRemote:</string>
<string>merge:</string>
<string>pullRemote:</string>
<string>pushDefaultRemoteForRef:</string>
<string>pushToRemote:</string>
<string>pushUpdatesToRemote:</string>
<string>rebaseActiveBranch:</string>
<string>rebaseHeadBranch:</string>
<string>showTagInfoSheet:</string>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -2849,6 +2884,16 @@
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
File diff suppressed because it is too large Load Diff
+18
View File
@@ -45,6 +45,8 @@
93F7857F0EA3ABF100C1F443 /* PBCommitMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93F7857E0EA3ABF100C1F443 /* PBCommitMessageView.m */; };
D26DC6450E782C9000C777B2 /* gitx.icns in Resources */ = {isa = PBXBuildFile; fileRef = D26DC6440E782C9000C777B2 /* gitx.icns */; };
D8083A43111E045D00337480 /* PBRemoteProgressSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083A42111E045D00337480 /* PBRemoteProgressSheet.m */; };
D8083C44111F106800337480 /* PBAddRemoteSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083C43111F106800337480 /* PBAddRemoteSheet.m */; };
D8083C47111F136400337480 /* PBAddRemoteSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8083C45111F136400337480 /* PBAddRemoteSheet.xib */; };
D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */; };
D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */; };
D85B939310E3D8B4007F3C28 /* PBCreateBranchSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */; };
@@ -217,6 +219,9 @@
D26DC6440E782C9000C777B2 /* gitx.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = gitx.icns; sourceTree = "<group>"; };
D8083A2D111E045300337480 /* PBRemoteProgressSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBRemoteProgressSheet.h; sourceTree = "<group>"; };
D8083A42111E045D00337480 /* PBRemoteProgressSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBRemoteProgressSheet.m; sourceTree = "<group>"; };
D8083C42111F106800337480 /* PBAddRemoteSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBAddRemoteSheet.h; sourceTree = "<group>"; };
D8083C43111F106800337480 /* PBAddRemoteSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBAddRemoteSheet.m; sourceTree = "<group>"; };
D8083C46111F136400337480 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBAddRemoteSheet.xib; sourceTree = "<group>"; };
D823487410CB382C00944BDE /* Terminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terminal.h; sourceTree = "<group>"; };
D854948410D5C01B0083B917 /* PBCreateBranchSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCreateBranchSheet.h; sourceTree = "<group>"; };
D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCreateBranchSheet.m; sourceTree = "<group>"; };
@@ -468,6 +473,7 @@
D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */,
D889EB3010E6BCBB00F08413 /* PBCreateTagSheet.xib */,
D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */,
D8083C45111F136400337480 /* PBAddRemoteSheet.xib */,
47DBDB680E94EF6500671A1E /* Preferences.xib */,
F569AE920F2CBD7C00C2FFA7 /* Credits.html */,
);
@@ -519,6 +525,8 @@
D8E3B34C10DCA958001096A3 /* PBCreateTagSheet.m */,
D8083A2D111E045300337480 /* PBRemoteProgressSheet.h */,
D8083A42111E045D00337480 /* PBRemoteProgressSheet.m */,
D8083C42111F106800337480 /* PBAddRemoteSheet.h */,
D8083C43111F106800337480 /* PBAddRemoteSheet.m */,
);
name = Sheets;
sourceTree = "<group>";
@@ -862,6 +870,7 @@
D85B939310E3D8B4007F3C28 /* PBCreateBranchSheet.xib in Resources */,
D889EB3110E6BCBB00F08413 /* PBCreateTagSheet.xib in Resources */,
D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */,
D8083C47111F136400337480 /* PBAddRemoteSheet.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -984,6 +993,7 @@
D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */,
D8E3B34D10DCA958001096A3 /* PBCreateTagSheet.m in Sources */,
D8083A43111E045D00337480 /* PBRemoteProgressSheet.m in Sources */,
D8083C44111F106800337480 /* PBAddRemoteSheet.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1076,6 +1086,14 @@
name = RepositoryWindow.xib;
sourceTree = "<group>";
};
D8083C45111F136400337480 /* PBAddRemoteSheet.xib */ = {
isa = PBXVariantGroup;
children = (
D8083C46111F136400337480 /* English */,
);
name = PBAddRemoteSheet.xib;
sourceTree = "<group>";
};
D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */ = {
isa = PBXVariantGroup;
children = (
+42
View File
@@ -0,0 +1,42 @@
//
// PBAddRemoteSheet.h
// GitX
//
// Created by Nathan Kinsinger on 12/8/09.
// Copyright 2009 Nathan Kinsinger. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class PBGitRepository;
@interface PBAddRemoteSheet : NSWindowController {
PBGitRepository *repository;
NSTextField *remoteName;
NSTextField *remoteURL;
NSTextField *errorMessage;
NSOpenPanel *browseSheet;
NSView *browseAccessoryView;
}
+ (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo;
- (IBAction) browseFolders:(id)sender;
- (IBAction) addRemote:(id)sender;
- (IBAction) orderOutAddRemoteSheet:(id)sender;
- (IBAction) showHideHiddenFiles:(id)sender;
@property (readwrite) PBGitRepository *repository;
@property (readwrite) IBOutlet NSTextField *remoteName;
@property (readwrite) IBOutlet NSTextField *remoteURL;
@property (readwrite) IBOutlet NSTextField *errorMessage;
@property (readwrite) NSOpenPanel *browseSheet;
@property (readwrite) IBOutlet NSView *browseAccessoryView;
@end
+142
View File
@@ -0,0 +1,142 @@
//
// PBAddRemoteSheet.m
// GitX
//
// Created by Nathan Kinsinger on 12/8/09.
// Copyright 2009 Nathan Kinsinger. All rights reserved.
//
#import "PBAddRemoteSheet.h"
#import "PBGitWindowController.h"
#import "PBGitRepository.h"
@interface PBAddRemoteSheet ()
- (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo;
- (void) openAddRemoteSheet;
@end
@implementation PBAddRemoteSheet
@synthesize repository;
@synthesize remoteName;
@synthesize remoteURL;
@synthesize errorMessage;
@synthesize browseSheet;
@synthesize browseAccessoryView;
#pragma mark -
#pragma mark PBAddRemoteSheet
+ (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo
{
PBAddRemoteSheet *sheet = [[self alloc] initWithWindowNibName:@"PBAddRemoteSheet"];
[sheet beginAddRemoteSheetForRepository:repo];
}
- (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo
{
self.repository = repo;
[self window];
[self openAddRemoteSheet];
}
- (void) openAddRemoteSheet
{
[self.errorMessage setStringValue:@""];
[NSApp beginSheet:[self window] modalForWindow:[self.repository.windowController window] modalDelegate:self didEndSelector:nil contextInfo:NULL];
}
- (void) browseSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
{
[sheet orderOut:self];
if (code == NSOKButton)
[self.remoteURL setStringValue:[(NSOpenPanel *)sheet filename]];
[self openAddRemoteSheet];
}
#pragma mark IBActions
- (IBAction) browseFolders:(id)sender
{
[self orderOutAddRemoteSheet:nil];
self.browseSheet = [NSOpenPanel openPanel];
[browseSheet setTitle:@"Add remote"];
[browseSheet setMessage:@"Select a folder with a git repository"];
[browseSheet setCanChooseFiles:NO];
[browseSheet setCanChooseDirectories:YES];
[browseSheet setAllowsMultipleSelection:NO];
[browseSheet setCanCreateDirectories:NO];
[browseSheet setAccessoryView:browseAccessoryView];
[browseSheet beginSheetForDirectory:nil file:nil types:nil
modalForWindow:[self.repository.windowController window]
modalDelegate:self
didEndSelector:@selector(browseSheetDidEnd:returnCode:contextInfo:)
contextInfo:NULL];
}
- (IBAction) addRemote:(id)sender
{
[self.errorMessage setStringValue:@""];
NSString *name = [[self.remoteName stringValue] copy];
if ([name isEqualToString:@""]) {
[self.errorMessage setStringValue:@"Remote name is required"];
return;
}
if (![self.repository checkRefFormat:[@"refs/remotes/" stringByAppendingString:name]]) {
[self.errorMessage setStringValue:@"Invalid remote name"];
return;
}
NSString *url = [[self.remoteURL stringValue] copy];
if ([url isEqualToString:@""]) {
[self.errorMessage setStringValue:@"Remote URL is required"];
return;
}
[self orderOutAddRemoteSheet:self];
[self.repository beginAddRemote:name forURL:url];
}
- (IBAction) orderOutAddRemoteSheet:(id)sender
{
[NSApp endSheet:[self window]];
[[self window] orderOut:self];
}
- (IBAction) showHideHiddenFiles:(id)sender
{
// This uses undocumented OpenPanel features to show hidden files (required for 10.5 support)
NSNumber *showHidden = [NSNumber numberWithBool:[sender state] == NSOnState];
[[self.browseSheet valueForKey:@"_navView"] setValue:showHidden forKey:@"showsHiddenFiles"];
}
@end
+1
View File
@@ -54,6 +54,7 @@
// Repository Methods
- (IBAction) createBranch:(id)sender;
- (IBAction) createTag:(id)sender;
- (IBAction) showAddRemoteSheet:(id)sender;
- (void) copyCommitInfo;
+6
View File
@@ -13,6 +13,7 @@
#import "PBCommitList.h"
#import "PBCreateBranchSheet.h"
#import "PBCreateTagSheet.h"
#import "PBAddRemoteSheet.h"
#define QLPreviewPanel NSClassFromString(@"QLPreviewPanel")
@@ -360,4 +361,9 @@
[PBCreateTagSheet beginCreateTagSheetAtRefish:realCommit inRepository:repository];
}
- (IBAction) showAddRemoteSheet:(id)sender
{
[PBAddRemoteSheet beginAddRemoteSheetForRepository:self.repository];
}
@end
+1
View File
@@ -29,6 +29,7 @@ extern NSString* PBGitRepositoryErrorDomain;
PBGitRevSpecifier *_headRef; // Caching
}
- (void) beginAddRemote:(NSString *)remoteName forURL:(NSString *)remoteURL;
- (void) beginFetchFromRemoteForRef:(PBGitRef *)ref;
- (void) beginPullFromRemote:(PBGitRef *)remoteRef forRef:(PBGitRef *)ref;
- (void) beginPushRef:(PBGitRef *)ref toRemote:(PBGitRef *)remoteRef;
+9
View File
@@ -483,6 +483,15 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain";
#pragma mark Repository commands
- (void) beginAddRemote:(NSString *)remoteName forURL:(NSString *)remoteURL
{
NSArray *arguments = [NSArray arrayWithObjects:@"remote", @"add", @"-f", remoteName, remoteURL, nil];
NSString *description = [NSString stringWithFormat:@"Adding the remote %@ and fetching tracking branches", remoteName];
NSString *title = @"Adding a remote";
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inRepository:self];
}
- (void) beginFetchFromRemoteForRef:(PBGitRef *)ref
{
NSMutableArray *arguments = [NSMutableArray arrayWithObject:@"fetch"];