Merge remote branch 'brotherbard/experimental' into local branch 'bb/experimental'
@@ -11,6 +11,7 @@
|
||||
#import "PBGitRepository.h"
|
||||
|
||||
@class PBCLIProxy;
|
||||
@class PBCloneRepositoryPanel;
|
||||
|
||||
@interface ApplicationController : NSObject
|
||||
{
|
||||
@@ -21,6 +22,7 @@
|
||||
NSManagedObjectContext *managedObjectContext;
|
||||
|
||||
PBCLIProxy *cliProxy;
|
||||
PBCloneRepositoryPanel *cloneRepositoryPanel;
|
||||
}
|
||||
@property (retain) PBCLIProxy* cliProxy;
|
||||
|
||||
@@ -38,4 +40,5 @@
|
||||
|
||||
- (IBAction)togglePreviewPanel:(id)previewPanel;
|
||||
|
||||
- (IBAction) showCloneRepository:(id)sender;
|
||||
@end
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#import "PBPrefsWindowController.h"
|
||||
#import "PBNSURLPathUserDefaultsTransfomer.h"
|
||||
#import "PBGitDefaults.h"
|
||||
#import "PBCloneRepositoryPanel.h"
|
||||
|
||||
@implementation ApplicationController
|
||||
@synthesize cliProxy;
|
||||
@@ -27,11 +28,9 @@
|
||||
#endif
|
||||
|
||||
if(self = [super init]) {
|
||||
/* Location of QuickLookUI.framework - it's public now */
|
||||
if(![[NSBundle bundleWithPath:@"/System/Library/Frameworks/Quartz.framework/Frameworks/QuickLookUI.framework"] load])
|
||||
{
|
||||
NSLog(@"Could not load QuickLook");
|
||||
}
|
||||
if(![[NSBundle bundleWithPath:@"/System/Library/Frameworks/Quartz.framework/Frameworks/QuickLookUI.framework"] load])
|
||||
if(![[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load])
|
||||
NSLog(@"Could not load QuickLook");
|
||||
self.cliProxy = [PBCLIProxy new];
|
||||
}
|
||||
|
||||
@@ -67,32 +66,47 @@
|
||||
{
|
||||
[self registerServices];
|
||||
|
||||
BOOL hasOpenedDocuments = NO;
|
||||
NSArray *launchedDocuments = [[[PBRepositoryDocumentController sharedDocumentController] documents] copy];
|
||||
|
||||
// Only try to open a default document if there are no documents open already.
|
||||
// For example, the application might have been launched by double-clicking a .git repository,
|
||||
// or by dragging a folder to the app icon
|
||||
if ([[[PBRepositoryDocumentController sharedDocumentController] documents] count])
|
||||
return;
|
||||
if ([launchedDocuments count])
|
||||
hasOpenedDocuments = YES;
|
||||
|
||||
// open any documents that were open the last time the app quit
|
||||
if ([PBGitDefaults openPreviousDocumentsOnLaunch]) {
|
||||
for (NSString *path in [PBGitDefaults previousDocumentPaths]) {
|
||||
NSURL *url = [NSURL fileURLWithPath:path isDirectory:YES];
|
||||
NSError *error = nil;
|
||||
if (url && [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&error])
|
||||
hasOpenedDocuments = YES;
|
||||
}
|
||||
}
|
||||
|
||||
// Try to find the current directory, to open that as a repository
|
||||
if ([PBGitDefaults openCurDirOnLaunch] && !hasOpenedDocuments) {
|
||||
NSString *curPath = [[[NSProcessInfo processInfo] environment] objectForKey:@"PWD"];
|
||||
NSURL *url = nil;
|
||||
if (curPath)
|
||||
url = [NSURL fileURLWithPath:curPath];
|
||||
// Try to open the found URL
|
||||
NSError *error = nil;
|
||||
if (url && [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&error])
|
||||
hasOpenedDocuments = YES;
|
||||
}
|
||||
|
||||
// to bring the launched documents to the front
|
||||
for (PBGitRepository *document in launchedDocuments)
|
||||
[document showWindows];
|
||||
|
||||
if (![[NSApplication sharedApplication] isActive])
|
||||
return;
|
||||
|
||||
NSURL *url = nil;
|
||||
|
||||
// Try to find the current directory, to open that as a repository
|
||||
if ([PBGitDefaults openCurDirOnLaunch]) {
|
||||
NSString *curPath = [[[NSProcessInfo processInfo] environment] objectForKey:@"PWD"];
|
||||
if (curPath)
|
||||
url = [NSURL fileURLWithPath:curPath];
|
||||
}
|
||||
|
||||
// Try to open the found URL
|
||||
NSError *error = nil;
|
||||
if (url && [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&error])
|
||||
return;
|
||||
|
||||
// The current directory was not enabled or could not be opened (most likely it’s not a git repository).
|
||||
// show an open panel for the user to select a repository to view
|
||||
if ([PBGitDefaults showOpenPanelOnLaunch])
|
||||
if ([PBGitDefaults showOpenPanelOnLaunch] && !hasOpenedDocuments)
|
||||
[[PBRepositoryDocumentController sharedDocumentController] openDocument:self];
|
||||
}
|
||||
|
||||
@@ -120,6 +134,14 @@
|
||||
[NSApp orderFrontStandardAboutPanelWithOptions:dict];
|
||||
}
|
||||
|
||||
- (IBAction) showCloneRepository:(id)sender
|
||||
{
|
||||
if (!cloneRepositoryPanel)
|
||||
cloneRepositoryPanel = [PBCloneRepositoryPanel panel];
|
||||
|
||||
[cloneRepositoryPanel showWindow:self];
|
||||
}
|
||||
|
||||
- (IBAction)installCliTool:(id)sender;
|
||||
{
|
||||
BOOL success = NO;
|
||||
@@ -344,6 +366,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)applicationWillTerminate:(NSNotification *)aNotification
|
||||
{
|
||||
[PBGitDefaults removePreviousDocumentPaths];
|
||||
|
||||
if ([PBGitDefaults openPreviousDocumentsOnLaunch]) {
|
||||
NSArray *documents = [[PBRepositoryDocumentController sharedDocumentController] documents];
|
||||
if ([documents count] > 0) {
|
||||
NSMutableArray *paths = [NSMutableArray array];
|
||||
for (PBGitRepository *repository in documents)
|
||||
[paths addObject:[repository workingDirectory]];
|
||||
|
||||
[PBGitDefaults setPreviousDocumentPaths:paths];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Implementation of dealloc, to release the retained variables.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
@interface QLPreviewPanel : NSPanel
|
||||
+ (id)sharedPreviewPanel;
|
||||
|
||||
// part of the public QL API
|
||||
+ (BOOL)sharedPreviewPanelExists;
|
||||
- (void)reloadData;
|
||||
- (void)setDataSource:(id)source;
|
||||
|
||||
// the private QL API
|
||||
+ (id)_previewPanel;
|
||||
+ (BOOL)isSharedPreviewPanelLoaded;
|
||||
- (id)initWithContentRect:(struct _NSRect)fp8 styleMask:(unsigned int)fp24 backing:(unsigned int)fp28 defer:(BOOL)fp32;
|
||||
|
||||
@@ -71,5 +71,6 @@
|
||||
- (void)crossFadeView:(NSView *)oldView withView:(NSView *)newView;
|
||||
- (NSRect)frameForView:(NSView *)view;
|
||||
|
||||
- (NSString *)defaultViewIdentifier;
|
||||
|
||||
@end
|
||||
|
||||
@@ -211,9 +211,9 @@ static DBPrefsWindowController *_sharedPrefsWindowController = nil;
|
||||
[toolbar release];
|
||||
}
|
||||
|
||||
NSString *firstIdentifier = [toolbarIdentifiers objectAtIndex:0];
|
||||
[[[self window] toolbar] setSelectedItemIdentifier:firstIdentifier];
|
||||
[self displayViewForIdentifier:firstIdentifier animate:NO];
|
||||
NSString *identifier = [self defaultViewIdentifier];
|
||||
[[[self window] toolbar] setSelectedItemIdentifier:identifier];
|
||||
[self displayViewForIdentifier:identifier animate:NO];
|
||||
|
||||
[[self window] center];
|
||||
|
||||
@@ -406,4 +406,16 @@ static DBPrefsWindowController *_sharedPrefsWindowController = nil;
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Default View
|
||||
|
||||
|
||||
- (NSString *)defaultViewIdentifier
|
||||
{
|
||||
return [toolbarIdentifiers objectAtIndex:0];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,818 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1050</int>
|
||||
<string key="IBDocument.SystemVersion">10C540</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">759</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.25</string>
|
||||
<string key="IBDocument.HIToolboxVersion">458.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="NS.object.0">759</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="3"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSCustomObject" id="1001">
|
||||
<string key="NSClassName">PBCloneRepsitoryToSheet</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1003">
|
||||
<string key="NSClassName">FirstResponder</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1004">
|
||||
<string key="NSClassName">NSApplication</string>
|
||||
</object>
|
||||
<object class="NSCustomView" id="302983545">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSTextField" id="470406788">
|
||||
<reference key="NSNextResponder" ref="302983545"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 36}, {283, 17}}</string>
|
||||
<reference key="NSSuperview" ref="302983545"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="238493634">
|
||||
<int key="NSCellFlags">68288064</int>
|
||||
<int key="NSCellFlags2">138413056</int>
|
||||
<string key="NSContents">Select a folder to clone into</string>
|
||||
<object class="NSFont" key="NSSupport" id="451842987">
|
||||
<string key="NSName">LucidaGrande</string>
|
||||
<double key="NSSize">13</double>
|
||||
<int key="NSfFlags">1044</int>
|
||||
</object>
|
||||
<reference key="NSControlView" ref="470406788"/>
|
||||
<object class="NSColor" key="NSBackgroundColor">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlColor</string>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSTextColor">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlTextColor</string>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSButton" id="762546328">
|
||||
<reference key="NSNextResponder" ref="302983545"/>
|
||||
<int key="NSvFlags">269</int>
|
||||
<string key="NSFrame">{{77, 12}, {163, 18}}</string>
|
||||
<reference key="NSSuperview" ref="302983545"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="799312909">
|
||||
<int key="NSCellFlags">-2080244224</int>
|
||||
<int key="NSCellFlags2">0</int>
|
||||
<string key="NSContents">Create bare repository</string>
|
||||
<reference key="NSSupport" ref="451842987"/>
|
||||
<reference key="NSControlView" ref="762546328"/>
|
||||
<int key="NSButtonFlags">1211912703</int>
|
||||
<int key="NSButtonFlags2">2</int>
|
||||
<object class="NSCustomResource" key="NSNormalImage">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">NSSwitch</string>
|
||||
</object>
|
||||
<object class="NSButtonImageSource" key="NSAlternateImage">
|
||||
<string key="NSImageName">NSSwitch</string>
|
||||
</object>
|
||||
<string key="NSAlternateContents"/>
|
||||
<string key="NSKeyEquivalent"/>
|
||||
<int key="NSPeriodicDelay">200</int>
|
||||
<int key="NSPeriodicInterval">25</int>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{317, 63}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<string key="NSClassName">NSView</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">cloneToAccessoryView</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="302983545"/>
|
||||
</object>
|
||||
<int key="connectionID">6</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">value: isBare</string>
|
||||
<reference key="source" ref="762546328"/>
|
||||
<reference key="destination" ref="1001"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="762546328"/>
|
||||
<reference key="NSDestination" ref="1001"/>
|
||||
<string key="NSLabel">value: isBare</string>
|
||||
<string key="NSBinding">value</string>
|
||||
<string key="NSKeyPath">isBare</string>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="connectionID">8</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">message</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="470406788"/>
|
||||
</object>
|
||||
<int key="connectionID">11</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="1001"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="1003"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">First Responder</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-3</int>
|
||||
<reference key="object" ref="1004"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Application</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3</int>
|
||||
<reference key="object" ref="302983545"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="762546328"/>
|
||||
<reference ref="470406788"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="762546328"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="799312909"/>
|
||||
</object>
|
||||
<reference key="parent" ref="302983545"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">5</int>
|
||||
<reference key="object" ref="799312909"/>
|
||||
<reference key="parent" ref="762546328"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">9</int>
|
||||
<reference key="object" ref="470406788"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="238493634"/>
|
||||
</object>
|
||||
<reference key="parent" ref="302983545"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10</int>
|
||||
<reference key="object" ref="238493634"/>
|
||||
<reference key="parent" ref="470406788"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>10.IBPluginDependency</string>
|
||||
<string>3.IBEditorWindowLastContentRect</string>
|
||||
<string>3.IBPluginDependency</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
<string>5.IBPluginDependency</string>
|
||||
<string>9.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{758, 1074}, {317, 63}}</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>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">11</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">PBCloneRepsitoryToSheet</string>
|
||||
<string key="superclassName">NSWindowController</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>cloneToAccessoryView</string>
|
||||
<string>message</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSView</string>
|
||||
<string>NSTextField</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">PBCloneRepsitoryToSheet.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSActionCell</string>
|
||||
<string key="superclassName">NSCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1014545486">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="550502967">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="937524086">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSButton</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSButtonCell</string>
|
||||
<string key="superclassName">NSActionCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSCell</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSControl</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="785954635">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSFormatter</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSMenu</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="674909843">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="1014545486"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="550502967"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="937524086"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="785954635"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="674909843"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1023986861">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Sparkle.framework/Headers/SUUpdater.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebDownload.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebEditingDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebFrameLoadDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebJavaPlugIn.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPlugin.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPluginContainer.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPolicyDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebResourceLoadDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebScriptObject.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebUIDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSResponder</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextField</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextFieldCell</string>
|
||||
<string key="superclassName">NSActionCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<reference key="sourceIdentifier" ref="1023986861"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindowController</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="NSMutableDictionary" key="actions">
|
||||
<string key="NS.key.0">showWindow:</string>
|
||||
<string key="NS.object.0">id</string>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1050" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<string key="IBDocument.LastKnownRelativeProjectPath">../GitX.xcodeproj</string>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
</data>
|
||||
</archive>
|
||||
@@ -0,0 +1,807 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1050</int>
|
||||
<string key="IBDocument.SystemVersion">10C540</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">732</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.25</string>
|
||||
<string key="IBDocument.HIToolboxVersion">458.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="NS.object.0">732</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="2"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSCustomObject" id="1001">
|
||||
<string key="NSClassName">PBRemoteProgressSheet</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1003">
|
||||
<string key="NSClassName">FirstResponder</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1004">
|
||||
<string key="NSClassName">NSApplication</string>
|
||||
</object>
|
||||
<object class="NSWindowTemplate" id="1005">
|
||||
<int key="NSWindowStyleMask">1</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
<string key="NSWindowRect">{{196, 412}, {397, 98}}</string>
|
||||
<int key="NSWTFlags">544736256</int>
|
||||
<string key="NSWindowTitle">Window</string>
|
||||
<string key="NSWindowClass">NSWindow</string>
|
||||
<nil key="NSViewClass"/>
|
||||
<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
|
||||
<object class="NSView" key="NSWindowView" id="1006">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSProgressIndicator" id="214375840">
|
||||
<reference key="NSNextResponder" ref="1006"/>
|
||||
<int key="NSvFlags">1314</int>
|
||||
<object class="NSPSMatrix" key="NSDrawMatrix"/>
|
||||
<string key="NSFrame">{{35, 16}, {344, 20}}</string>
|
||||
<reference key="NSSuperview" ref="1006"/>
|
||||
<int key="NSpiFlags">16394</int>
|
||||
<double key="NSMaxValue">100</double>
|
||||
</object>
|
||||
<object class="NSTextField" id="939163389">
|
||||
<reference key="NSNextResponder" ref="1006"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<string key="NSFrame">{{17, 44}, {363, 34}}</string>
|
||||
<reference key="NSSuperview" ref="1006"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="476186767">
|
||||
<int key="NSCellFlags">67239424</int>
|
||||
<int key="NSCellFlags2">272891904</int>
|
||||
<string key="NSContents">Operation in progress.</string>
|
||||
<object class="NSFont" key="NSSupport">
|
||||
<string key="NSName">LucidaGrande</string>
|
||||
<double key="NSSize">13</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
<reference key="NSControlView" ref="939163389"/>
|
||||
<object class="NSColor" key="NSBackgroundColor">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlColor</string>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSTextColor">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlTextColor</string>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{397, 98}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
|
||||
<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">window</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="1005"/>
|
||||
</object>
|
||||
<int key="connectionID">21</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">progressIndicator</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="214375840"/>
|
||||
</object>
|
||||
<int key="connectionID">22</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">progressDescription</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="939163389"/>
|
||||
</object>
|
||||
<int key="connectionID">33</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="1001"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="1003"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">First Responder</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-3</int>
|
||||
<reference key="object" ref="1004"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Application</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">1</int>
|
||||
<reference key="object" ref="1005"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="1006"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Progress Window (Window)</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="1006"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="939163389"/>
|
||||
<reference ref="214375840"/>
|
||||
</object>
|
||||
<reference key="parent" ref="1005"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">16</int>
|
||||
<reference key="object" ref="214375840"/>
|
||||
<reference key="parent" ref="1006"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">31</int>
|
||||
<reference key="object" ref="939163389"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="476186767"/>
|
||||
</object>
|
||||
<reference key="parent" ref="1006"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">32</int>
|
||||
<reference key="object" ref="476186767"/>
|
||||
<reference key="parent" ref="939163389"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>1.IBEditorWindowLastContentRect</string>
|
||||
<string>1.IBPluginDependency</string>
|
||||
<string>1.IBWindowTemplateEditedContentRect</string>
|
||||
<string>1.NSWindowTemplate.visibleAtLaunch</string>
|
||||
<string>1.WindowOrigin</string>
|
||||
<string>1.editorWindowContentRectSynchronizationRect</string>
|
||||
<string>1.windowTemplate.hasMinSize</string>
|
||||
<string>1.windowTemplate.minSize</string>
|
||||
<string>16.IBPluginDependency</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>31.IBPluginDependency</string>
|
||||
<string>32.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>{{639, 822}, {397, 98}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{639, 822}, {397, 98}}</string>
|
||||
<boolean value="NO"/>
|
||||
<string>{196, 240}</string>
|
||||
<string>{{202, 428}, {480, 270}}</string>
|
||||
<boolean value="NO"/>
|
||||
<string>{420, 170}</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>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">33</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">PBRemoteProgressSheet</string>
|
||||
<string key="superclassName">NSWindowController</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>progressDescription</string>
|
||||
<string>progressIndicator</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSTextField</string>
|
||||
<string>NSProgressIndicator</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">PBRemoteProgressSheet.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSActionCell</string>
|
||||
<string key="superclassName">NSCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="410402024">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1064883922">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="307820401">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSCell</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSControl</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="436732488">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSFormatter</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSMenu</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1058558911">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="410402024"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="1064883922"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="307820401"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="436732488"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="1058558911"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="76980010">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Sparkle.framework/Headers/SUUpdater.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebDownload.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebEditingDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebFrameLoadDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebJavaPlugIn.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPlugin.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPluginContainer.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebPolicyDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebResourceLoadDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebScriptObject.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">WebKit.framework/Headers/WebUIDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSProgressIndicator</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSProgressIndicator.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSResponder</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextField</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextFieldCell</string>
|
||||
<string key="superclassName">NSActionCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<reference key="sourceIdentifier" ref="76980010"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindowController</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="NSMutableDictionary" key="actions">
|
||||
<string key="NS.key.0">showWindow:</string>
|
||||
<string key="NS.object.0">id</string>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1050" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<string key="IBDocument.LastKnownRelativeProjectPath">../GitX.xcodeproj</string>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
</data>
|
||||
</archive>
|
||||
@@ -57,6 +57,44 @@
|
||||
93F7857F0EA3ABF100C1F443 /* PBCommitMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93F7857E0EA3ABF100C1F443 /* PBCommitMessageView.m */; };
|
||||
D26DC6450E782C9000C777B2 /* gitx.icns in Resources */ = {isa = PBXBuildFile; fileRef = D26DC6440E782C9000C777B2 /* gitx.icns */; };
|
||||
D8E41F1410A7B023007BB8FC /* KBPopUpToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8E41F1310A7B023007BB8FC /* KBPopUpToolbarItem.m */; };
|
||||
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 */; };
|
||||
D8083DC4111F90F300337480 /* PBCloneRepsitoryToSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083DC3111F90F300337480 /* PBCloneRepsitoryToSheet.m */; };
|
||||
D8083DCD111F918900337480 /* PBCloneRepsitoryToSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8083DCB111F918900337480 /* PBCloneRepsitoryToSheet.xib */; };
|
||||
D8083E03111FA33700337480 /* PBCloneRepositoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */; };
|
||||
D828A40D1127B18700F09D11 /* PBSourceViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D828A40C1127B18700F09D11 /* PBSourceViewCell.m */; };
|
||||
D828A4111127B1C400F09D11 /* PBSourceViewBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */; };
|
||||
D828A5F21128AE7200F09D11 /* FetchTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D828A5EF1128AE7200F09D11 /* FetchTemplate.png */; };
|
||||
D828A5F31128AE7200F09D11 /* PullTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D828A5F01128AE7200F09D11 /* PullTemplate.png */; };
|
||||
D828A5F41128AE7200F09D11 /* PushTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D828A5F11128AE7200F09D11 /* PushTemplate.png */; };
|
||||
D828AEEC112F411100F09D11 /* CloneRepositoryTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D828AEEB112F411100F09D11 /* CloneRepositoryTemplate.png */; };
|
||||
D8295D2A1130A1DC00C838E8 /* PBGitHistoryList.m in Sources */ = {isa = PBXBuildFile; fileRef = D8295D291130A1DC00C838E8 /* PBGitHistoryList.m */; };
|
||||
D8295DE01130E43900C838E8 /* PBGitHistoryGrapher.m in Sources */ = {isa = PBXBuildFile; fileRef = D8295DDF1130E43900C838E8 /* PBGitHistoryGrapher.m */; };
|
||||
D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */; };
|
||||
D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */; };
|
||||
D85810551127476E007F254B /* StageView.png in Resources */ = {isa = PBXBuildFile; fileRef = D85810541127476E007F254B /* StageView.png */; };
|
||||
D858108311274D28007F254B /* Branch.png in Resources */ = {isa = PBXBuildFile; fileRef = D858108011274D28007F254B /* Branch.png */; };
|
||||
D858108411274D28007F254B /* RemoteBranch.png in Resources */ = {isa = PBXBuildFile; fileRef = D858108111274D28007F254B /* RemoteBranch.png */; };
|
||||
D858108511274D28007F254B /* Tag.png in Resources */ = {isa = PBXBuildFile; fileRef = D858108211274D28007F254B /* Tag.png */; };
|
||||
D85B939310E3D8B4007F3C28 /* PBCreateBranchSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */; };
|
||||
D889EB3110E6BCBB00F08413 /* PBCreateTagSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D889EB3010E6BCBB00F08413 /* PBCreateTagSheet.xib */; };
|
||||
D8A4BB6F11337D5C00E92D51 /* PBGitGradientBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A4BB6E11337D5C00E92D51 /* PBGitGradientBarView.m */; };
|
||||
D8A4BD071134AD2900E92D51 /* CherryPickTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D8A4BD041134AD2900E92D51 /* CherryPickTemplate.png */; };
|
||||
D8A4BD081134AD2900E92D51 /* MergeTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D8A4BD051134AD2900E92D51 /* MergeTemplate.png */; };
|
||||
D8A4BD091134AD2900E92D51 /* RebaseTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = D8A4BD061134AD2900E92D51 /* RebaseTemplate.png */; };
|
||||
D8E105471157C18200FC28A4 /* PBQLTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = D8E105461157C18200FC28A4 /* PBQLTextView.m */; };
|
||||
D8E3B2B810DC9FB2001096A3 /* ScriptingBridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8E3B2B710DC9FB2001096A3 /* ScriptingBridge.framework */; };
|
||||
D8E3B34D10DCA958001096A3 /* PBCreateTagSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8E3B34C10DCA958001096A3 /* PBCreateTagSheet.m */; };
|
||||
D8FDD9F711432A12005647F6 /* PBCloneRepositoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8FDD9F511432A12005647F6 /* PBCloneRepositoryPanel.xib */; };
|
||||
D8FDDA6A114335E8005647F6 /* PBGitSVBranchItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA5D114335E8005647F6 /* PBGitSVBranchItem.m */; };
|
||||
D8FDDA6B114335E8005647F6 /* PBGitSVFolderItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA5F114335E8005647F6 /* PBGitSVFolderItem.m */; };
|
||||
D8FDDA6C114335E8005647F6 /* PBGitSVOtherRevItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA61114335E8005647F6 /* PBGitSVOtherRevItem.m */; };
|
||||
D8FDDA6D114335E8005647F6 /* PBGitSVRemoteBranchItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA63114335E8005647F6 /* PBGitSVRemoteBranchItem.m */; };
|
||||
D8FDDA6E114335E8005647F6 /* PBGitSVRemoteItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA65114335E8005647F6 /* PBGitSVRemoteItem.m */; };
|
||||
D8FDDA6F114335E8005647F6 /* PBGitSVStageItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA67114335E8005647F6 /* PBGitSVStageItem.m */; };
|
||||
D8FDDA70114335E8005647F6 /* PBGitSVTagItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA69114335E8005647F6 /* PBGitSVTagItem.m */; };
|
||||
D8FDDBF41143F318005647F6 /* AddRemote.png in Resources */ = {isa = PBXBuildFile; fileRef = D8FDDBF31143F318005647F6 /* AddRemote.png */; };
|
||||
EB2A734A0FEE3F09006601CF /* PBCollapsibleSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2A73490FEE3F09006601CF /* PBCollapsibleSplitView.m */; };
|
||||
F50A411F0EBB874C00208746 /* mainSplitterBar.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F50A411D0EBB874C00208746 /* mainSplitterBar.tiff */; };
|
||||
F50A41200EBB874C00208746 /* mainSplitterDimple.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F50A411E0EBB874C00208746 /* mainSplitterDimple.tiff */; };
|
||||
@@ -77,6 +115,7 @@
|
||||
F56524F00E02D45200F03B52 /* PBGitCommit.m in Sources */ = {isa = PBXBuildFile; fileRef = F56524EF0E02D45200F03B52 /* PBGitCommit.m */; };
|
||||
F56526240E03D85900F03B52 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F56526230E03D85900F03B52 /* WebKit.framework */; };
|
||||
F565262B0E03D89B00F03B52 /* PBWebHistoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F565262A0E03D89B00F03B52 /* PBWebHistoryController.m */; };
|
||||
F567B88D1057FA9F000DB976 /* NSOutlineViewExt.m in Sources */ = {isa = PBXBuildFile; fileRef = F567B88C1057FA9F000DB976 /* NSOutlineViewExt.m */; };
|
||||
F567CC64106E6BC80059BB9D /* PBGitRepository.m in Sources */ = {isa = PBXBuildFile; fileRef = F5945E160E02B0C200706420 /* PBGitRepository.m */; };
|
||||
F567CC65106E6BC90059BB9D /* PBGitBinary.m in Sources */ = {isa = PBXBuildFile; fileRef = F53C4DF60E97FC630022AD59 /* PBGitBinary.m */; };
|
||||
F567CC66106E6BC90059BB9D /* PBGitConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 93FCCBA80EA8AF450061B02B /* PBGitConfig.m */; };
|
||||
@@ -114,6 +153,9 @@
|
||||
F5886A330ED5D5580066E74C /* PBGitRevSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = F53FF2040E7ABB5300389171 /* PBGitRevSpecifier.m */; };
|
||||
F5886A340ED5D55D0066E74C /* PBGitBinary.m in Sources */ = {isa = PBXBuildFile; fileRef = F53C4DF60E97FC630022AD59 /* PBGitBinary.m */; };
|
||||
F5886A360ED5D56E0066E74C /* PBGitTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F56174560E058893001DCD79 /* PBGitTree.m */; };
|
||||
F58DB55910566D3500CFDF4A /* PBGitSidebarController.m in Sources */ = {isa = PBXBuildFile; fileRef = F58DB55810566D3500CFDF4A /* PBGitSidebarController.m */; };
|
||||
F58DB56010566E3900CFDF4A /* PBGitSidebarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F58DB55F10566E3900CFDF4A /* PBGitSidebarView.xib */; };
|
||||
F58DB5E8105671B600CFDF4A /* PBSourceViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = F58DB5E7105671B600CFDF4A /* PBSourceViewItem.m */; };
|
||||
F59116E60E843BB50072CCB1 /* PBGitCommitView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F59116E50E843BB50072CCB1 /* PBGitCommitView.xib */; };
|
||||
F59116E90E843BCB0072CCB1 /* PBGitCommitController.m in Sources */ = {isa = PBXBuildFile; fileRef = F59116E80E843BCB0072CCB1 /* PBGitCommitController.m */; };
|
||||
F593DF780E9E636C003A8559 /* PBFileChangesTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F593DF770E9E636C003A8559 /* PBFileChangesTableView.m */; };
|
||||
@@ -235,6 +277,66 @@
|
||||
D26DC6440E782C9000C777B2 /* gitx.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = gitx.icns; sourceTree = "<group>"; };
|
||||
D8E41F1210A7B019007BB8FC /* KBPopUpToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KBPopUpToolbarItem.h; sourceTree = "<group>"; };
|
||||
D8E41F1310A7B023007BB8FC /* KBPopUpToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KBPopUpToolbarItem.m; 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>"; };
|
||||
D8083DC2111F90F300337480 /* PBCloneRepsitoryToSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCloneRepsitoryToSheet.h; sourceTree = "<group>"; };
|
||||
D8083DC3111F90F300337480 /* PBCloneRepsitoryToSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCloneRepsitoryToSheet.m; sourceTree = "<group>"; };
|
||||
D8083DCC111F918900337480 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCloneRepsitoryToSheet.xib; sourceTree = "<group>"; };
|
||||
D8083E01111FA33700337480 /* PBCloneRepositoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCloneRepositoryPanel.h; sourceTree = "<group>"; };
|
||||
D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCloneRepositoryPanel.m; sourceTree = "<group>"; };
|
||||
D823487410CB382C00944BDE /* Terminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terminal.h; sourceTree = "<group>"; };
|
||||
D828A40B1127B18700F09D11 /* PBSourceViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewCell.h; sourceTree = "<group>"; };
|
||||
D828A40C1127B18700F09D11 /* PBSourceViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSourceViewCell.m; sourceTree = "<group>"; };
|
||||
D828A40F1127B1C400F09D11 /* PBSourceViewBadge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewBadge.h; sourceTree = "<group>"; };
|
||||
D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSourceViewBadge.m; sourceTree = "<group>"; };
|
||||
D828A5EF1128AE7200F09D11 /* FetchTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = FetchTemplate.png; path = Images/FetchTemplate.png; sourceTree = "<group>"; };
|
||||
D828A5F01128AE7200F09D11 /* PullTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PullTemplate.png; path = Images/PullTemplate.png; sourceTree = "<group>"; };
|
||||
D828A5F11128AE7200F09D11 /* PushTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PushTemplate.png; path = Images/PushTemplate.png; sourceTree = "<group>"; };
|
||||
D828AEEB112F411100F09D11 /* CloneRepositoryTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = CloneRepositoryTemplate.png; path = Images/CloneRepositoryTemplate.png; sourceTree = "<group>"; };
|
||||
D8295D281130A1DC00C838E8 /* PBGitHistoryList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitHistoryList.h; sourceTree = "<group>"; };
|
||||
D8295D291130A1DC00C838E8 /* PBGitHistoryList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitHistoryList.m; sourceTree = "<group>"; };
|
||||
D8295DDE1130E43900C838E8 /* PBGitHistoryGrapher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitHistoryGrapher.h; sourceTree = "<group>"; };
|
||||
D8295DDF1130E43900C838E8 /* PBGitHistoryGrapher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitHistoryGrapher.m; 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>"; };
|
||||
D854949310D5C3E20083B917 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCreateBranchSheet.xib; sourceTree = "<group>"; };
|
||||
D85810541127476E007F254B /* StageView.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = StageView.png; path = Images/StageView.png; sourceTree = "<group>"; };
|
||||
D858108011274D28007F254B /* Branch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Branch.png; path = Images/Branch.png; sourceTree = "<group>"; };
|
||||
D858108111274D28007F254B /* RemoteBranch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = RemoteBranch.png; path = Images/RemoteBranch.png; sourceTree = "<group>"; };
|
||||
D858108211274D28007F254B /* Tag.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Tag.png; path = Images/Tag.png; sourceTree = "<group>"; };
|
||||
D85B93F610E51279007F3C28 /* PBGitRefish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitRefish.h; sourceTree = "<group>"; };
|
||||
D8A4BB6D11337D5C00E92D51 /* PBGitGradientBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitGradientBarView.h; sourceTree = "<group>"; };
|
||||
D8A4BB6E11337D5C00E92D51 /* PBGitGradientBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitGradientBarView.m; sourceTree = "<group>"; };
|
||||
D8A4BD041134AD2900E92D51 /* CherryPickTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = CherryPickTemplate.png; path = Images/CherryPickTemplate.png; sourceTree = "<group>"; };
|
||||
D8A4BD051134AD2900E92D51 /* MergeTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = MergeTemplate.png; path = Images/MergeTemplate.png; sourceTree = "<group>"; };
|
||||
D8A4BD061134AD2900E92D51 /* RebaseTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = RebaseTemplate.png; path = Images/RebaseTemplate.png; sourceTree = "<group>"; };
|
||||
D8C1B77210E875CF009B7F8B /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBRemoteProgressSheet.xib; sourceTree = "<group>"; };
|
||||
D8E105451157C18200FC28A4 /* PBQLTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBQLTextView.h; sourceTree = "<group>"; };
|
||||
D8E105461157C18200FC28A4 /* PBQLTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBQLTextView.m; sourceTree = "<group>"; };
|
||||
D8E3B2B710DC9FB2001096A3 /* ScriptingBridge.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScriptingBridge.framework; path = /System/Library/Frameworks/ScriptingBridge.framework; sourceTree = "<absolute>"; };
|
||||
D8E3B34B10DCA958001096A3 /* PBCreateTagSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCreateTagSheet.h; sourceTree = "<group>"; };
|
||||
D8E3B34C10DCA958001096A3 /* PBCreateTagSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCreateTagSheet.m; sourceTree = "<group>"; };
|
||||
D8E3B38110DD4E2C001096A3 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCreateTagSheet.xib; sourceTree = "<group>"; };
|
||||
D8FDD9F611432A12005647F6 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCloneRepositoryPanel.xib; sourceTree = "<group>"; };
|
||||
D8FDDA5C114335E8005647F6 /* PBGitSVBranchItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVBranchItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA5D114335E8005647F6 /* PBGitSVBranchItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVBranchItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA5E114335E8005647F6 /* PBGitSVFolderItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVFolderItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA5F114335E8005647F6 /* PBGitSVFolderItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVFolderItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA60114335E8005647F6 /* PBGitSVOtherRevItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVOtherRevItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA61114335E8005647F6 /* PBGitSVOtherRevItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVOtherRevItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA62114335E8005647F6 /* PBGitSVRemoteBranchItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVRemoteBranchItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA63114335E8005647F6 /* PBGitSVRemoteBranchItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVRemoteBranchItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA64114335E8005647F6 /* PBGitSVRemoteItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVRemoteItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA65114335E8005647F6 /* PBGitSVRemoteItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVRemoteItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA66114335E8005647F6 /* PBGitSVStageItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVStageItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA67114335E8005647F6 /* PBGitSVStageItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVStageItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA68114335E8005647F6 /* PBGitSVTagItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSVTagItem.h; sourceTree = "<group>"; };
|
||||
D8FDDA69114335E8005647F6 /* PBGitSVTagItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVTagItem.m; sourceTree = "<group>"; };
|
||||
D8FDDA7311433634005647F6 /* PBSourceViewItems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewItems.h; sourceTree = "<group>"; };
|
||||
D8FDDBF31143F318005647F6 /* AddRemote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AddRemote.png; path = Images/AddRemote.png; sourceTree = "<group>"; };
|
||||
EB2A73480FEE3F09006601CF /* PBCollapsibleSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCollapsibleSplitView.h; sourceTree = "<group>"; };
|
||||
EB2A73490FEE3F09006601CF /* PBCollapsibleSplitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCollapsibleSplitView.m; sourceTree = "<group>"; };
|
||||
F50A411D0EBB874C00208746 /* mainSplitterBar.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = mainSplitterBar.tiff; path = Images/mainSplitterBar.tiff; sourceTree = "<group>"; };
|
||||
@@ -269,6 +371,8 @@
|
||||
F56526230E03D85900F03B52 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
F56526290E03D89B00F03B52 /* PBWebHistoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBWebHistoryController.h; sourceTree = "<group>"; };
|
||||
F565262A0E03D89B00F03B52 /* PBWebHistoryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBWebHistoryController.m; sourceTree = "<group>"; };
|
||||
F567B88B1057FA9F000DB976 /* NSOutlineViewExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSOutlineViewExt.h; sourceTree = "<group>"; };
|
||||
F567B88C1057FA9F000DB976 /* NSOutlineViewExt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSOutlineViewExt.m; sourceTree = "<group>"; };
|
||||
F567CC39106E6B910059BB9D /* GitXTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GitXTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
F567CC3A106E6B910059BB9D /* GitXTesting-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GitXTesting-Info.plist"; sourceTree = "<group>"; };
|
||||
F569AE920F2CBD7C00C2FFA7 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Credits.html; sourceTree = "<group>"; };
|
||||
@@ -288,6 +392,11 @@
|
||||
F5886A0A0ED5D27A0066E74C /* speedtest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = speedtest.m; sourceTree = "<group>"; };
|
||||
F5886A100ED5D33D0066E74C /* SpeedTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpeedTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
F5886A120ED5D33D0066E74C /* SpeedTest-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SpeedTest-Info.plist"; sourceTree = "<group>"; };
|
||||
F58DB55710566D3500CFDF4A /* PBGitSidebarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitSidebarController.h; sourceTree = "<group>"; };
|
||||
F58DB55810566D3500CFDF4A /* PBGitSidebarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSidebarController.m; sourceTree = "<group>"; };
|
||||
F58DB55F10566E3900CFDF4A /* PBGitSidebarView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PBGitSidebarView.xib; sourceTree = "<group>"; };
|
||||
F58DB5E6105671B600CFDF4A /* PBSourceViewItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewItem.h; sourceTree = "<group>"; };
|
||||
F58DB5E7105671B600CFDF4A /* PBSourceViewItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSourceViewItem.m; sourceTree = "<group>"; };
|
||||
F59116E50E843BB50072CCB1 /* PBGitCommitView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PBGitCommitView.xib; sourceTree = "<group>"; };
|
||||
F59116E70E843BCB0072CCB1 /* PBGitCommitController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitCommitController.h; sourceTree = "<group>"; };
|
||||
F59116E80E843BCB0072CCB1 /* PBGitCommitController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitCommitController.m; sourceTree = "<group>"; };
|
||||
@@ -349,6 +458,7 @@
|
||||
F5E4DBFB0EAB58D90013FAFC /* SystemConfiguration.framework in Frameworks */,
|
||||
F5C580E50EDA250900995434 /* libgit2.a in Frameworks */,
|
||||
65C77FA0108BF560003BD3B5 /* Quartz.framework in Frameworks */,
|
||||
D8E3B2B810DC9FB2001096A3 /* ScriptingBridge.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -405,6 +515,7 @@
|
||||
77C82804067257F0000B614F /* CoreData.framework */,
|
||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
|
||||
D8E3B2B710DC9FB2001096A3 /* ScriptingBridge.framework */,
|
||||
);
|
||||
name = "Other Frameworks";
|
||||
sourceTree = "<group>";
|
||||
@@ -446,14 +557,19 @@
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
653D949D109C257500B26705 /* RebaseTemplate.png */,
|
||||
653D949F109C27D400B26705 /* PullTemplate.png */,
|
||||
653D94A0109C27D400B26705 /* PushTemplate.png */,
|
||||
652C162410A94D0800B80380 /* PullPopUpTemplate.png */,
|
||||
652C162510A94D0800B80380 /* PushPopUpTemplate.png */,
|
||||
652C162610A94D0800B80380 /* RebasePopUpTemplate.png */,
|
||||
653D94A4109C42A500B26705 /* CloneRepositoryTemplate.png */,
|
||||
D858108011274D28007F254B /* Branch.png */,
|
||||
D858108111274D28007F254B /* RemoteBranch.png */,
|
||||
D858108211274D28007F254B /* Tag.png */,
|
||||
D85810541127476E007F254B /* StageView.png */,
|
||||
D8FDDBF31143F318005647F6 /* AddRemote.png */,
|
||||
D828A5EF1128AE7200F09D11 /* FetchTemplate.png */,
|
||||
D828A5F01128AE7200F09D11 /* PullTemplate.png */,
|
||||
D828A5F11128AE7200F09D11 /* PushTemplate.png */,
|
||||
D828AEEB112F411100F09D11 /* CloneRepositoryTemplate.png */,
|
||||
3BC07F4A0ED5A5C5009A7768 /* HistoryViewTemplate.png */,
|
||||
D8A4BD041134AD2900E92D51 /* CherryPickTemplate.png */,
|
||||
D8A4BD051134AD2900E92D51 /* MergeTemplate.png */,
|
||||
D8A4BD061134AD2900E92D51 /* RebaseTemplate.png */,
|
||||
3BC07F4B0ED5A5C5009A7768 /* CommitViewTemplate.png */,
|
||||
F56ADDD70ED19F9E002AC78F /* AddBranchTemplate.png */,
|
||||
65A102F110A7D9FE0033C593 /* AddRemoteBranchTemplate.png */,
|
||||
@@ -481,8 +597,15 @@
|
||||
F5E424100EA3E4D60046E362 /* PBDiffWindow.xib */,
|
||||
F52BCE020E84208300AA3741 /* PBGitHistoryView.xib */,
|
||||
F59116E50E843BB50072CCB1 /* PBGitCommitView.xib */,
|
||||
47DBDB690E94EF6500671A1E /* Preferences.xib */,
|
||||
D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */,
|
||||
D889EB3010E6BCBB00F08413 /* PBCreateTagSheet.xib */,
|
||||
D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */,
|
||||
D8083C45111F136400337480 /* PBAddRemoteSheet.xib */,
|
||||
D8083DCB111F918900337480 /* PBCloneRepsitoryToSheet.xib */,
|
||||
D8FDD9F511432A12005647F6 /* PBCloneRepositoryPanel.xib */,
|
||||
47DBDB680E94EF6500671A1E /* Preferences.xib */,
|
||||
F569AE920F2CBD7C00C2FFA7 /* Credits.html */,
|
||||
F58DB55F10566E3900CFDF4A /* PBGitSidebarView.xib */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
@@ -540,6 +663,49 @@
|
||||
name = cli;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D82F435F111B9C6D00A25A39 /* Sheets */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D854948410D5C01B0083B917 /* PBCreateBranchSheet.h */,
|
||||
D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */,
|
||||
D8E3B34B10DCA958001096A3 /* PBCreateTagSheet.h */,
|
||||
D8E3B34C10DCA958001096A3 /* PBCreateTagSheet.m */,
|
||||
D8083A2D111E045300337480 /* PBRemoteProgressSheet.h */,
|
||||
D8083A42111E045D00337480 /* PBRemoteProgressSheet.m */,
|
||||
D8083C42111F106800337480 /* PBAddRemoteSheet.h */,
|
||||
D8083C43111F106800337480 /* PBAddRemoteSheet.m */,
|
||||
D8083DC2111F90F300337480 /* PBCloneRepsitoryToSheet.h */,
|
||||
D8083DC3111F90F300337480 /* PBCloneRepsitoryToSheet.m */,
|
||||
D8083E01111FA33700337480 /* PBCloneRepositoryPanel.h */,
|
||||
D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */,
|
||||
);
|
||||
name = Sheets;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D8FDDA58114335B0005647F6 /* Source View Items */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D8FDDA7311433634005647F6 /* PBSourceViewItems.h */,
|
||||
F58DB5E6105671B600CFDF4A /* PBSourceViewItem.h */,
|
||||
F58DB5E7105671B600CFDF4A /* PBSourceViewItem.m */,
|
||||
D8FDDA66114335E8005647F6 /* PBGitSVStageItem.h */,
|
||||
D8FDDA67114335E8005647F6 /* PBGitSVStageItem.m */,
|
||||
D8FDDA5C114335E8005647F6 /* PBGitSVBranchItem.h */,
|
||||
D8FDDA5D114335E8005647F6 /* PBGitSVBranchItem.m */,
|
||||
D8FDDA64114335E8005647F6 /* PBGitSVRemoteItem.h */,
|
||||
D8FDDA65114335E8005647F6 /* PBGitSVRemoteItem.m */,
|
||||
D8FDDA62114335E8005647F6 /* PBGitSVRemoteBranchItem.h */,
|
||||
D8FDDA63114335E8005647F6 /* PBGitSVRemoteBranchItem.m */,
|
||||
D8FDDA68114335E8005647F6 /* PBGitSVTagItem.h */,
|
||||
D8FDDA69114335E8005647F6 /* PBGitSVTagItem.m */,
|
||||
D8FDDA60114335E8005647F6 /* PBGitSVOtherRevItem.h */,
|
||||
D8FDDA61114335E8005647F6 /* PBGitSVOtherRevItem.m */,
|
||||
D8FDDA5E114335E8005647F6 /* PBGitSVFolderItem.h */,
|
||||
D8FDDA5F114335E8005647F6 /* PBGitSVFolderItem.m */,
|
||||
);
|
||||
name = "Source View Items";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F50A41130EBB872D00208746 /* Widgets */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -568,9 +734,11 @@
|
||||
F57CC3850E05DDC1000472E2 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F58DB55610566D1F00CFDF4A /* Sidebar */,
|
||||
F5B161BB0EAB6E0C005A1DE1 /* Diff */,
|
||||
F5EF8C880E9D498F0050906B /* History */,
|
||||
F5E927F90E883EF600056E75 /* Commit */,
|
||||
D82F435F111B9C6D00A25A39 /* Sheets */,
|
||||
77C8280B06725ACE000B614F /* ApplicationController.h */,
|
||||
77C8280C06725ACE000B614F /* ApplicationController.m */,
|
||||
93CB42C00EAB7B2200530609 /* PBGitDefaults.h */,
|
||||
@@ -610,6 +778,8 @@
|
||||
F5DFFA6B0E075D8800617813 /* PBEasyFS.m */,
|
||||
F51308590E0740F2000C8BCD /* PBQLOutlineView.h */,
|
||||
F513085A0E0740F2000C8BCD /* PBQLOutlineView.m */,
|
||||
D8E105451157C18200FC28A4 /* PBQLTextView.h */,
|
||||
D8E105461157C18200FC28A4 /* PBQLTextView.m */,
|
||||
91B103CA0E898EC300C84364 /* PBIconAndTextCell.h */,
|
||||
91B103CB0E898EC300C84364 /* PBIconAndTextCell.m */,
|
||||
F5140DC70E8A8EB20091E9F3 /* RoundedRectangle.h */,
|
||||
@@ -626,6 +796,11 @@
|
||||
653D9309109BEAFE00B26705 /* PBGitXErrors.m */,
|
||||
D8E41F1210A7B019007BB8FC /* KBPopUpToolbarItem.h */,
|
||||
D8E41F1310A7B023007BB8FC /* KBPopUpToolbarItem.m */,
|
||||
D823487410CB382C00944BDE /* Terminal.h */,
|
||||
F567B88B1057FA9F000DB976 /* NSOutlineViewExt.h */,
|
||||
F567B88C1057FA9F000DB976 /* NSOutlineViewExt.m */,
|
||||
D8A4BB6D11337D5C00E92D51 /* PBGitGradientBarView.h */,
|
||||
D8A4BB6E11337D5C00E92D51 /* PBGitGradientBarView.m */,
|
||||
);
|
||||
name = Aux;
|
||||
sourceTree = "<group>";
|
||||
@@ -638,6 +813,20 @@
|
||||
name = SpeedTest;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F58DB55610566D1F00CFDF4A /* Sidebar */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F58DB55710566D3500CFDF4A /* PBGitSidebarController.h */,
|
||||
F58DB55810566D3500CFDF4A /* PBGitSidebarController.m */,
|
||||
D828A40B1127B18700F09D11 /* PBSourceViewCell.h */,
|
||||
D828A40C1127B18700F09D11 /* PBSourceViewCell.m */,
|
||||
D828A40F1127B1C400F09D11 /* PBSourceViewBadge.h */,
|
||||
D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */,
|
||||
D8FDDA58114335B0005647F6 /* Source View Items */,
|
||||
);
|
||||
name = Sidebar;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F59F1DD2105C4FDE00115F88 /* Index */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -682,12 +871,17 @@
|
||||
F5AD56770E79B78100EDAAFE /* PBCommitList.h */,
|
||||
F5AD56780E79B78100EDAAFE /* PBCommitList.m */,
|
||||
F5C6F6750E65FE2B00478D97 /* Graphing */,
|
||||
D85B93F610E51279007F3C28 /* PBGitRefish.h */,
|
||||
F56524EE0E02D45200F03B52 /* PBGitCommit.h */,
|
||||
F56524EF0E02D45200F03B52 /* PBGitCommit.m */,
|
||||
F5C007730E731B48007B84B2 /* PBGitRef.h */,
|
||||
F5C007740E731B48007B84B2 /* PBGitRef.m */,
|
||||
D8295D281130A1DC00C838E8 /* PBGitHistoryList.h */,
|
||||
D8295D291130A1DC00C838E8 /* PBGitHistoryList.m */,
|
||||
F5FF4E160E0829C20006317A /* PBGitRevList.h */,
|
||||
F5FF4E170E0829C20006317A /* PBGitRevList.mm */,
|
||||
D8295DDE1130E43900C838E8 /* PBGitHistoryGrapher.h */,
|
||||
D8295DDF1130E43900C838E8 /* PBGitHistoryGrapher.m */,
|
||||
F53FF2030E7ABB5300389171 /* PBGitRevSpecifier.h */,
|
||||
F53FF2040E7ABB5300389171 /* PBGitRevSpecifier.m */,
|
||||
F56174550E058893001DCD79 /* PBGitTree.h */,
|
||||
@@ -877,14 +1071,26 @@
|
||||
6552BA27109C4CA8003B4892 /* Preferences.xib in Resources */,
|
||||
47DBDBB10E94F6CA00671A1E /* Updates.png in Resources */,
|
||||
F569AE930F2CBD7C00C2FFA7 /* Credits.html in Resources */,
|
||||
653D949E109C257500B26705 /* RebaseTemplate.png in Resources */,
|
||||
653D94A1109C27D400B26705 /* PullTemplate.png in Resources */,
|
||||
653D94A2109C27D400B26705 /* PushTemplate.png in Resources */,
|
||||
653D94A5109C42A500B26705 /* CloneRepositoryTemplate.png in Resources */,
|
||||
65A102F210A7D9FE0033C593 /* AddRemoteBranchTemplate.png in Resources */,
|
||||
652C162710A94D0800B80380 /* PullPopUpTemplate.png in Resources */,
|
||||
652C162810A94D0800B80380 /* PushPopUpTemplate.png in Resources */,
|
||||
652C162910A94D0800B80380 /* RebasePopUpTemplate.png in Resources */,
|
||||
F58DB56010566E3900CFDF4A /* PBGitSidebarView.xib in Resources */,
|
||||
D85B939310E3D8B4007F3C28 /* PBCreateBranchSheet.xib in Resources */,
|
||||
D889EB3110E6BCBB00F08413 /* PBCreateTagSheet.xib in Resources */,
|
||||
D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */,
|
||||
D8083C47111F136400337480 /* PBAddRemoteSheet.xib in Resources */,
|
||||
D8083DCD111F918900337480 /* PBCloneRepsitoryToSheet.xib in Resources */,
|
||||
D8FDD9F711432A12005647F6 /* PBCloneRepositoryPanel.xib in Resources */,
|
||||
F58DB56010566E3900CFDF4A /* PBGitSidebarView.xib in Resources */,
|
||||
D85810551127476E007F254B /* StageView.png in Resources */,
|
||||
D858108311274D28007F254B /* Branch.png in Resources */,
|
||||
D858108411274D28007F254B /* RemoteBranch.png in Resources */,
|
||||
D858108511274D28007F254B /* Tag.png in Resources */,
|
||||
D828A5F21128AE7200F09D11 /* FetchTemplate.png in Resources */,
|
||||
D828A5F31128AE7200F09D11 /* PullTemplate.png in Resources */,
|
||||
D828A5F41128AE7200F09D11 /* PushTemplate.png in Resources */,
|
||||
D8FDDBF41143F318005647F6 /* AddRemote.png in Resources */,
|
||||
D8A4BD071134AD2900E92D51 /* CherryPickTemplate.png in Resources */,
|
||||
D8A4BD081134AD2900E92D51 /* MergeTemplate.png in Resources */,
|
||||
D8A4BD091134AD2900E92D51 /* RebaseTemplate.png in Resources */,
|
||||
D828AEEC112F411100F09D11 /* CloneRepositoryTemplate.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1020,6 +1226,28 @@
|
||||
654D16E8108C6CA6008D960C /* PBQLOutlineView.m in Sources */,
|
||||
653D930A109BEAFE00B26705 /* PBGitXErrors.m in Sources */,
|
||||
D8E41F1410A7B023007BB8FC /* KBPopUpToolbarItem.m in Sources */,
|
||||
D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */,
|
||||
D8E3B34D10DCA958001096A3 /* PBCreateTagSheet.m in Sources */,
|
||||
D8083A43111E045D00337480 /* PBRemoteProgressSheet.m in Sources */,
|
||||
D8083C44111F106800337480 /* PBAddRemoteSheet.m in Sources */,
|
||||
D8083DC4111F90F300337480 /* PBCloneRepsitoryToSheet.m in Sources */,
|
||||
D8083E03111FA33700337480 /* PBCloneRepositoryPanel.m in Sources */,
|
||||
F58DB55910566D3500CFDF4A /* PBGitSidebarController.m in Sources */,
|
||||
F58DB5E8105671B600CFDF4A /* PBSourceViewItem.m in Sources */,
|
||||
F567B88D1057FA9F000DB976 /* NSOutlineViewExt.m in Sources */,
|
||||
D8FDDA6A114335E8005647F6 /* PBGitSVBranchItem.m in Sources */,
|
||||
D8FDDA6B114335E8005647F6 /* PBGitSVFolderItem.m in Sources */,
|
||||
D8FDDA6C114335E8005647F6 /* PBGitSVOtherRevItem.m in Sources */,
|
||||
D8FDDA6D114335E8005647F6 /* PBGitSVRemoteBranchItem.m in Sources */,
|
||||
D8FDDA6E114335E8005647F6 /* PBGitSVRemoteItem.m in Sources */,
|
||||
D8FDDA6F114335E8005647F6 /* PBGitSVStageItem.m in Sources */,
|
||||
D8FDDA70114335E8005647F6 /* PBGitSVTagItem.m in Sources */,
|
||||
D8A4BB6F11337D5C00E92D51 /* PBGitGradientBarView.m in Sources */,
|
||||
D828A40D1127B18700F09D11 /* PBSourceViewCell.m in Sources */,
|
||||
D828A4111127B1C400F09D11 /* PBSourceViewBadge.m in Sources */,
|
||||
D8295D2A1130A1DC00C838E8 /* PBGitHistoryList.m in Sources */,
|
||||
D8295DE01130E43900C838E8 /* PBGitHistoryGrapher.m in Sources */,
|
||||
D8E105471157C18200FC28A4 /* PBQLTextView.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1096,6 +1324,78 @@
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
47DBDB680E94EF6500671A1E /* Preferences.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
47DBDB690E94EF6500671A1E /* English */,
|
||||
);
|
||||
name = Preferences.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
911111E00E58BD5A00BF76B4 /* RepositoryWindow.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
911111E10E58BD5A00BF76B4 /* English */,
|
||||
);
|
||||
name = RepositoryWindow.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D8083C45111F136400337480 /* PBAddRemoteSheet.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D8083C46111F136400337480 /* English */,
|
||||
);
|
||||
name = PBAddRemoteSheet.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D8083DCB111F918900337480 /* PBCloneRepsitoryToSheet.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D8083DCC111F918900337480 /* English */,
|
||||
);
|
||||
name = PBCloneRepsitoryToSheet.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D85B939210E3D8B4007F3C28 /* PBCreateBranchSheet.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D854949310D5C3E20083B917 /* English */,
|
||||
);
|
||||
name = PBCreateBranchSheet.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D889EB3010E6BCBB00F08413 /* PBCreateTagSheet.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D8E3B38110DD4E2C001096A3 /* English */,
|
||||
);
|
||||
name = PBCreateTagSheet.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D8C1B77210E875CF009B7F8B /* English */,
|
||||
);
|
||||
name = PBRemoteProgressSheet.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D8FDD9F511432A12005647F6 /* PBCloneRepositoryPanel.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
D8FDD9F611432A12005647F6 /* English */,
|
||||
);
|
||||
name = PBCloneRepositoryPanel.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F5B721C20E05CF7E00AF29DC /* MainMenu.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
F5B721C30E05CF7E00AF29DC /* English */,
|
||||
);
|
||||
name = MainMenu.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 546 B |
|
After Width: | Height: | Size: 200 B |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 199 B |
|
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 215 B |
|
Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 217 B |
|
Before Width: | Height: | Size: 307 B After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 513 B |
|
After Width: | Height: | Size: 271 B |
|
After Width: | Height: | Size: 527 B |
@@ -36,8 +36,14 @@
|
||||
while (n > 0) {
|
||||
n = read(fd, buffer + bytesReceived++, 1);
|
||||
|
||||
if (n < 0)
|
||||
[[NSException exceptionWithName:@"Socket error" reason:@"Remote host closed connection" userInfo:nil] raise];
|
||||
if (n < 0) {
|
||||
if (errno == EINTR) {
|
||||
n = 1;
|
||||
bytesReceived--;
|
||||
} else {
|
||||
[[NSException exceptionWithName:@"Socket error" reason:@"Remote host closed connection" userInfo:nil] raise];
|
||||
}
|
||||
}
|
||||
|
||||
if (bytesReceived >= bufferSize) {
|
||||
// Make buffer bigger
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
//
|
||||
// NSOutlineViewExit.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Pieter de Bie on 9/9/09.
|
||||
// Copyright 2009 __MyCompanyName__. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@interface NSOutlineView (PBExpandParents)
|
||||
|
||||
- (void)PBExpandItem:(id)item expandParents:(BOOL)expand;
|
||||
@end
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// NSOutlineViewExit.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Pieter de Bie on 9/9/09.
|
||||
// Copyright 2009 __MyCompanyName__. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NSOutlineViewExt.h"
|
||||
|
||||
|
||||
@implementation NSOutlineView (PBExpandParents)
|
||||
|
||||
- (void)PBExpandItem:(id)item expandParents:(BOOL)expand
|
||||
{
|
||||
NSMutableArray *parents = [NSMutableArray array];
|
||||
while (item) {
|
||||
[parents insertObject:item atIndex:0];
|
||||
item = [item parent];
|
||||
}
|
||||
|
||||
for (id p in parents)
|
||||
[self expandItem:p];
|
||||
}
|
||||
@end
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -63,7 +63,7 @@
|
||||
[document.windowController showCommitView:self];
|
||||
else {
|
||||
PBGitRevSpecifier* rev = [[PBGitRevSpecifier alloc] initWithParameters:arguments];
|
||||
rev.workingDirectory = repositoryPath;
|
||||
rev.workingDirectory = url;
|
||||
document.currentBranch = [document addBranch: rev];
|
||||
[document.windowController showHistoryView:self];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// PBCloneRepositoryPanel.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/7/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@interface PBCloneRepositoryPanel : NSWindowController {
|
||||
NSTextField *repositoryURL;
|
||||
NSTextField *destinationPath;
|
||||
NSTextField *errorMessage;
|
||||
NSView *repositoryAccessoryView;
|
||||
|
||||
NSOpenPanel *browseRepositoryPanel;
|
||||
NSOpenPanel *browseDestinationPanel;
|
||||
|
||||
NSString *path;
|
||||
BOOL isBare;
|
||||
}
|
||||
|
||||
+ (id) panel;
|
||||
|
||||
- (void)showMessageSheet:(NSString *)messageText infoText:(NSString *)infoText;
|
||||
- (void)showErrorSheet:(NSError *)error;
|
||||
|
||||
- (IBAction) closeCloneRepositoryPanel:(id)sender;
|
||||
- (IBAction) clone:(id)sender;
|
||||
- (IBAction) browseRepository:(id)sender;
|
||||
- (IBAction) showHideHiddenFiles:(id)sender;
|
||||
- (IBAction) browseDestination:(id)sender;
|
||||
|
||||
@property (assign) IBOutlet NSTextField *repositoryURL;
|
||||
@property (assign) IBOutlet NSTextField *destinationPath;
|
||||
@property (assign) IBOutlet NSTextField *errorMessage;
|
||||
@property (assign) IBOutlet NSView *repositoryAccessoryView;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,199 @@
|
||||
//
|
||||
// PBCloneRepositoryPanel.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/7/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBCloneRepositoryPanel.h"
|
||||
#import "PBRemoteProgressSheet.h"
|
||||
#import "PBRepositoryDocumentController.h"
|
||||
#import "PBGitDefaults.h"
|
||||
|
||||
|
||||
|
||||
@implementation PBCloneRepositoryPanel
|
||||
|
||||
|
||||
@synthesize repositoryURL;
|
||||
@synthesize destinationPath;
|
||||
@synthesize errorMessage;
|
||||
@synthesize repositoryAccessoryView;
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark PBCloneRepositoryPanel
|
||||
|
||||
+ (id) panel
|
||||
{
|
||||
return [[self alloc] initWithWindowNibName:@"PBCloneRepositoryPanel"];
|
||||
}
|
||||
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
[self window];
|
||||
[self.errorMessage setStringValue:@""];
|
||||
path = [PBGitDefaults recentCloneDestination];
|
||||
if (path)
|
||||
[self.destinationPath setStringValue:path];
|
||||
|
||||
browseRepositoryPanel = [NSOpenPanel openPanel];
|
||||
[browseRepositoryPanel setTitle:@"Browse for git repository"];
|
||||
[browseRepositoryPanel setMessage:@"Select a folder with a git repository"];
|
||||
[browseRepositoryPanel setPrompt:@"Select"];
|
||||
[browseRepositoryPanel setCanChooseFiles:NO];
|
||||
[browseRepositoryPanel setCanChooseDirectories:YES];
|
||||
[browseRepositoryPanel setAllowsMultipleSelection:NO];
|
||||
[browseRepositoryPanel setCanCreateDirectories:NO];
|
||||
[browseRepositoryPanel setAccessoryView:repositoryAccessoryView];
|
||||
|
||||
browseDestinationPanel = [NSOpenPanel openPanel];
|
||||
[browseDestinationPanel setTitle:@"Browse clone destination"];
|
||||
[browseDestinationPanel setMessage:@"Select a folder to clone the git repository into"];
|
||||
[browseDestinationPanel setPrompt:@"Select"];
|
||||
[browseDestinationPanel setCanChooseFiles:NO];
|
||||
[browseDestinationPanel setCanChooseDirectories:YES];
|
||||
[browseDestinationPanel setAllowsMultipleSelection:NO];
|
||||
[browseDestinationPanel setCanCreateDirectories:YES];
|
||||
}
|
||||
|
||||
|
||||
- (void)showMessageSheet:(NSString *)messageText infoText:(NSString *)infoText
|
||||
{
|
||||
NSAlert *alert = [NSAlert alertWithMessageText:messageText
|
||||
defaultButton:nil alternateButton:nil otherButton:nil
|
||||
informativeTextWithFormat:infoText];
|
||||
|
||||
[alert beginSheetModalForWindow:[self window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(messageSheetDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
- (void)showErrorSheet:(NSError *)error
|
||||
{
|
||||
[[NSAlert alertWithError:error] beginSheetModalForWindow:[self window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(errorSheetDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark IBActions
|
||||
|
||||
- (IBAction) closeCloneRepositoryPanel:(id)sender
|
||||
{
|
||||
[self close];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction) clone:(id)sender
|
||||
{
|
||||
[self.errorMessage setStringValue:@""];
|
||||
|
||||
NSString *url = [self.repositoryURL stringValue];
|
||||
if ([url isEqualToString:@""]) {
|
||||
[self.errorMessage setStringValue:@"Repository URL is required"];
|
||||
return;
|
||||
}
|
||||
|
||||
path = [self.destinationPath stringValue];
|
||||
if ([path isEqualToString:@""]) {
|
||||
[self.errorMessage setStringValue:@"Destination path is required"];
|
||||
return;
|
||||
}
|
||||
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"clone", @"--", url, path, nil];
|
||||
if (isBare)
|
||||
[arguments insertObject:@"--bare" atIndex:1];
|
||||
|
||||
NSString *description = [NSString stringWithFormat:@"Cloning repository at: %@", url];
|
||||
NSString *title = @"Cloning Repository";
|
||||
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inDir:nil windowController:self];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction) browseRepository:(id)sender
|
||||
{
|
||||
[browseRepositoryPanel beginSheetForDirectory:nil file:nil types:nil
|
||||
modalForWindow:[self window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(browseRepositorySheetDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
- (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];
|
||||
[[browseRepositoryPanel valueForKey:@"_navView"] setValue:showHidden forKey:@"showsHiddenFiles"];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction) browseDestination:(id)sender
|
||||
{
|
||||
[browseDestinationPanel beginSheetForDirectory:nil file:nil types:nil
|
||||
modalForWindow:[self window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(browseDestinationSheetDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark Callbacks
|
||||
|
||||
- (void) browseRepositorySheetDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
|
||||
{
|
||||
[sheet orderOut:self];
|
||||
|
||||
if (code == NSOKButton) {
|
||||
NSURL *url = [[sheet URLs] lastObject];
|
||||
[self.repositoryURL setStringValue:[url path]];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void) browseDestinationSheetDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
|
||||
{
|
||||
[sheet orderOut:self];
|
||||
|
||||
if (code == NSOKButton) {
|
||||
NSURL *url = [[sheet URLs] lastObject];
|
||||
[self.destinationPath setStringValue:[url path]];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void) messageSheetDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
|
||||
{
|
||||
NSURL *documentURL = [NSURL fileURLWithPath:path];
|
||||
|
||||
NSError *error = nil;
|
||||
id document = [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:documentURL display:YES error:&error];
|
||||
if (!document && error)
|
||||
[self showErrorSheet:error];
|
||||
else {
|
||||
[self close];
|
||||
|
||||
NSString *containingPath = [path stringByDeletingLastPathComponent];
|
||||
[PBGitDefaults setRecentCloneDestination:containingPath];
|
||||
[self.destinationPath setStringValue:containingPath];
|
||||
[self.repositoryURL setStringValue:@""];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void) errorSheetDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
|
||||
{
|
||||
[self close];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// PBCloneRepsitoryToSheet.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/7/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@class PBGitRepository;
|
||||
|
||||
@interface PBCloneRepsitoryToSheet : NSWindowController {
|
||||
PBGitRepository *repository;
|
||||
|
||||
BOOL isBare;
|
||||
|
||||
NSTextField *message;
|
||||
NSView *cloneToAccessoryView;
|
||||
}
|
||||
|
||||
+ (void) beginCloneRepsitoryToSheetForRepository:(PBGitRepository *)repo;
|
||||
|
||||
|
||||
@property (readwrite) PBGitRepository *repository;
|
||||
|
||||
@property (readwrite) BOOL isBare;
|
||||
|
||||
@property (readwrite) IBOutlet NSTextField *message;
|
||||
@property (readwrite) IBOutlet NSView *cloneToAccessoryView;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,80 @@
|
||||
//
|
||||
// PBCloneRepsitoryToSheet.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/7/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBCloneRepsitoryToSheet.h"
|
||||
#import "PBGitRepository.h"
|
||||
|
||||
|
||||
|
||||
@interface PBCloneRepsitoryToSheet ()
|
||||
|
||||
- (void) beginCloneRepsitoryToSheetForRepository:(PBGitRepository *)repo;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation PBCloneRepsitoryToSheet
|
||||
|
||||
@synthesize repository;
|
||||
@synthesize isBare;
|
||||
@synthesize message;
|
||||
@synthesize cloneToAccessoryView;
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark PBCloneRepsitoryToSheet
|
||||
|
||||
+ (void) beginCloneRepsitoryToSheetForRepository:(PBGitRepository *)repo
|
||||
{
|
||||
PBCloneRepsitoryToSheet *sheet = [[self alloc] initWithWindowNibName:@"PBCloneRepsitoryToSheet"];
|
||||
[sheet beginCloneRepsitoryToSheetForRepository:repo];
|
||||
}
|
||||
|
||||
|
||||
- (void) beginCloneRepsitoryToSheetForRepository:(PBGitRepository *)repo
|
||||
{
|
||||
self.repository = repo;
|
||||
[self window];
|
||||
}
|
||||
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
NSOpenPanel *cloneToSheet = [NSOpenPanel openPanel];
|
||||
|
||||
[cloneToSheet setTitle:@"Clone Repository To"];
|
||||
[cloneToSheet setPrompt:@"Clone"];
|
||||
[self.message setStringValue:[NSString stringWithFormat:@"Select a folder to clone %@ into", [self.repository projectName]]];
|
||||
[cloneToSheet setCanSelectHiddenExtension:NO];
|
||||
[cloneToSheet setCanChooseFiles:NO];
|
||||
[cloneToSheet setCanChooseDirectories:YES];
|
||||
[cloneToSheet setAllowsMultipleSelection:NO];
|
||||
[cloneToSheet setCanCreateDirectories:YES];
|
||||
[cloneToSheet setAccessoryView:cloneToAccessoryView];
|
||||
|
||||
[cloneToSheet beginSheetForDirectory:nil file:nil types:nil
|
||||
modalForWindow:[self.repository.windowController window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(cloneToSheetDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
- (void) cloneToSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
|
||||
{
|
||||
[sheet orderOut:self];
|
||||
|
||||
if (code == NSOKButton) {
|
||||
NSString *clonePath = [(NSOpenPanel *)sheet filename];
|
||||
NSLog(@"clone path = %@", clonePath);
|
||||
[self.repository cloneRepositoryToPath:clonePath bare:self.isBare];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -28,12 +28,15 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if ([character isEqualToString:@" "])
|
||||
{
|
||||
if ([event modifierFlags] & NSShiftKeyMask)
|
||||
[webView scrollPageUp: self];
|
||||
if ([character isEqualToString:@" "]) {
|
||||
if (controller.selectedCommitDetailsIndex == 0) {
|
||||
if ([event modifierFlags] & NSShiftKeyMask)
|
||||
[webView scrollPageUp:self];
|
||||
else
|
||||
[webView scrollPageDown:self];
|
||||
}
|
||||
else
|
||||
[webView scrollPageDown: self];
|
||||
[controller toggleQLPreviewPanel:self];
|
||||
}
|
||||
else if ([character rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"jkcv"]].location == 0)
|
||||
[webController sendKey: character];
|
||||
@@ -61,8 +64,9 @@
|
||||
int row = [self rowAtPoint:location];
|
||||
int column = [self columnAtPoint:location];
|
||||
PBGitRevisionCell *cell = (PBGitRevisionCell *)[self preparedCellAtColumn:column row:row];
|
||||
NSRect cellFrame = [self frameOfCellAtColumn:column row:row];
|
||||
|
||||
int index = [cell indexAtX:location.x];
|
||||
int index = [cell indexAtX:(location.x - cellFrame.origin.x)];
|
||||
if (index == -1)
|
||||
return [super dragImageForRowsWithIndexes:dragRows tableColumns:tableColumns event:dragEvent offset:dragImageOffset];
|
||||
|
||||
|
||||
@@ -13,28 +13,24 @@
|
||||
|
||||
- (void)drawRect:(NSRect)aRect
|
||||
{
|
||||
NSColor *originalColor = [self backgroundColor];
|
||||
[originalColor set];
|
||||
NSRectFill(aRect);
|
||||
[super drawRect:aRect];
|
||||
|
||||
// draw a vertical line after the given size (used as an indicator
|
||||
// for the first line of the commit message)
|
||||
float characterWidth = [@" " sizeWithAttributes:[self typingAttributes]].width;
|
||||
float lineWidth = characterWidth * [PBGitDefaults commitMessageViewVerticalLineLength];
|
||||
if ([PBGitDefaults commitMessageViewHasVerticalLine]) {
|
||||
float characterWidth = [@" " sizeWithAttributes:[self typingAttributes]].width;
|
||||
float lineWidth = characterWidth * [PBGitDefaults commitMessageViewVerticalLineLength];
|
||||
|
||||
[[NSColor lightGrayColor] set];
|
||||
// This depends upon the fact that NSTextView always redraws complete lines.
|
||||
float padding = [[self textContainer] lineFragmentPadding];
|
||||
NSRect line;
|
||||
line.origin.x = padding + aRect.origin.x + lineWidth;
|
||||
line.origin.y = aRect.origin.y;
|
||||
line.size.width = 1;
|
||||
line.size.height = aRect.size.height;
|
||||
NSRectFill(line);
|
||||
|
||||
[self setBackgroundColor:nil];
|
||||
[super drawRect:aRect];
|
||||
[self setBackgroundColor:originalColor];
|
||||
[[NSColor lightGrayColor] set];
|
||||
// This depends upon the fact that NSTextView always redraws complete lines.
|
||||
float padding = [[self textContainer] lineFragmentPadding];
|
||||
NSRect line;
|
||||
line.origin.x = padding + aRect.origin.x + lineWidth;
|
||||
line.origin.y = aRect.origin.y;
|
||||
line.size.width = 1;
|
||||
line.size.height = aRect.size.height;
|
||||
NSRectFill(line);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// PBCreateBranchSheet.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 12/13/09.
|
||||
// Copyright 2009 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBGitRefish.h"
|
||||
|
||||
|
||||
@class PBGitRepository;
|
||||
|
||||
|
||||
@interface PBCreateBranchSheet : NSWindowController {
|
||||
PBGitRepository *repository;
|
||||
id <PBGitRefish> startRefish;
|
||||
|
||||
BOOL shouldCheckoutBranch;
|
||||
|
||||
NSTextField *branchNameField;
|
||||
NSTextField *errorMessageField;
|
||||
}
|
||||
|
||||
+ (void) beginCreateBranchSheetAtRefish:(id <PBGitRefish>)ref inRepository:(PBGitRepository *)repo;
|
||||
|
||||
|
||||
- (IBAction) createBranch:(id)sender;
|
||||
- (IBAction) closeCreateBranchSheet:(id)sender;
|
||||
|
||||
|
||||
@property (retain) PBGitRepository *repository;
|
||||
@property (retain) id <PBGitRefish> startRefish;
|
||||
|
||||
@property (assign) BOOL shouldCheckoutBranch;
|
||||
|
||||
@property (assign) IBOutlet NSTextField *branchNameField;
|
||||
@property (assign) IBOutlet NSTextField *errorMessageField;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// PBCreateBranchSheet.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 12/13/09.
|
||||
// Copyright 2009 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBCreateBranchSheet.h"
|
||||
#import "PBGitRepository.h"
|
||||
#import "PBGitDefaults.h"
|
||||
#import "PBGitCommit.h"
|
||||
#import "PBGitRef.h"
|
||||
|
||||
@interface PBCreateBranchSheet ()
|
||||
|
||||
- (void) beginCreateBranchSheetAtRefish:(id <PBGitRefish>)ref inRepository:(PBGitRepository *)repo;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation PBCreateBranchSheet
|
||||
|
||||
|
||||
@synthesize repository;
|
||||
@synthesize startRefish;
|
||||
|
||||
@synthesize shouldCheckoutBranch;
|
||||
|
||||
@synthesize branchNameField;
|
||||
@synthesize errorMessageField;
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark PBCreateBranchSheet
|
||||
|
||||
+ (void) beginCreateBranchSheetAtRefish:(id <PBGitRefish>)ref inRepository:(PBGitRepository *)repo
|
||||
{
|
||||
PBCreateBranchSheet *sheet = [[self alloc] initWithWindowNibName:@"PBCreateBranchSheet"];
|
||||
[sheet beginCreateBranchSheetAtRefish:ref inRepository:repo];
|
||||
}
|
||||
|
||||
|
||||
- (void) beginCreateBranchSheetAtRefish:(id <PBGitRefish>)ref inRepository:(PBGitRepository *)repo
|
||||
{
|
||||
self.repository = repo;
|
||||
self.startRefish = ref;
|
||||
|
||||
[self window]; // loads the window (if it wasn't already)
|
||||
[self.errorMessageField setStringValue:@""];
|
||||
self.shouldCheckoutBranch = [PBGitDefaults shouldCheckoutBranch];
|
||||
|
||||
[NSApp beginSheet:[self window] modalForWindow:[self.repository.windowController window] modalDelegate:self didEndSelector:nil contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark IBActions
|
||||
|
||||
- (IBAction) createBranch:(id)sender
|
||||
{
|
||||
NSString *name = [self.branchNameField stringValue];
|
||||
PBGitRef *ref = [PBGitRef refFromString:[kGitXBranchRefPrefix stringByAppendingString:name]];
|
||||
|
||||
if (![self.repository checkRefFormat:[ref ref]]) {
|
||||
[self.errorMessageField setStringValue:@"Invalid name"];
|
||||
[self.errorMessageField setHidden:NO];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.repository refExists:ref]) {
|
||||
[self.errorMessageField setStringValue:@"Branch already exists"];
|
||||
[self.errorMessageField setHidden:NO];
|
||||
return;
|
||||
}
|
||||
|
||||
[self closeCreateBranchSheet:self];
|
||||
|
||||
[self.repository createBranch:name atRefish:self.startRefish];
|
||||
|
||||
[PBGitDefaults setShouldCheckoutBranch:self.shouldCheckoutBranch];
|
||||
|
||||
if (self.shouldCheckoutBranch)
|
||||
[self.repository checkoutRefish:ref];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction) closeCreateBranchSheet:(id)sender
|
||||
{
|
||||
[NSApp endSheet:[self window]];
|
||||
[[self window] orderOut:self];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,38 @@
|
||||
//
|
||||
// PBCreateTagSheet.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 12/18/09.
|
||||
// Copyright 2009 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBGitRefish.h"
|
||||
|
||||
|
||||
@class PBGitRepository;
|
||||
|
||||
|
||||
@interface PBCreateTagSheet : NSWindowController {
|
||||
PBGitRepository *repository;
|
||||
id <PBGitRefish> targetRefish;
|
||||
|
||||
NSTextField *tagNameField;
|
||||
NSTextView *tagMessageText;
|
||||
NSTextField *errorMessageField;
|
||||
}
|
||||
|
||||
+ (void) beginCreateTagSheetAtRefish:(id <PBGitRefish>)refish inRepository:(PBGitRepository *)repo;
|
||||
|
||||
- (IBAction) createTag:(id)sender;
|
||||
- (IBAction) closeCreateTagSheet:(id)sender;
|
||||
|
||||
|
||||
@property (retain) PBGitRepository *repository;
|
||||
@property (retain) id <PBGitRefish> targetRefish;
|
||||
|
||||
@property (assign) IBOutlet NSTextField *tagNameField;
|
||||
@property (assign) IBOutlet NSTextView *tagMessageText;
|
||||
@property (assign) IBOutlet NSTextField *errorMessageField;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,93 @@
|
||||
//
|
||||
// PBCreateTagSheet.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 12/18/09.
|
||||
// Copyright 2009 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBCreateTagSheet.h"
|
||||
#import "PBGitRepository.h"
|
||||
#import "PBGitCommit.h"
|
||||
|
||||
|
||||
@interface PBCreateTagSheet ()
|
||||
|
||||
- (void) beginCreateTagSheetAtRefish:(id <PBGitRefish>)refish inRepository:(PBGitRepository *)repo;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation PBCreateTagSheet
|
||||
|
||||
@synthesize repository;
|
||||
@synthesize targetRefish;
|
||||
|
||||
@synthesize tagNameField;
|
||||
@synthesize tagMessageText;
|
||||
@synthesize errorMessageField;
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark PBCreateTagSheet
|
||||
|
||||
+ (void) beginCreateTagSheetAtRefish:(id <PBGitRefish>)refish inRepository:(PBGitRepository *)repo
|
||||
{
|
||||
PBCreateTagSheet *sheet = [[self alloc] initWithWindowNibName:@"PBCreateTagSheet"];
|
||||
[sheet beginCreateTagSheetAtRefish:refish inRepository:repo];
|
||||
}
|
||||
|
||||
|
||||
- (void) beginCreateTagSheetAtRefish:(id <PBGitRefish>)refish inRepository:(PBGitRepository *)repo
|
||||
{
|
||||
self.repository = repo;
|
||||
self.targetRefish = refish;
|
||||
|
||||
[self window]; // loads the window (if it wasn't already)
|
||||
[self.errorMessageField setStringValue:@""];
|
||||
|
||||
[NSApp beginSheet:[self window] modalForWindow:[self.repository.windowController window] modalDelegate:self didEndSelector:nil contextInfo:NULL];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark IBActions
|
||||
|
||||
- (IBAction) createTag:(id)sender
|
||||
{
|
||||
NSString *tagName = [self.tagNameField stringValue];
|
||||
[self.errorMessageField setHidden:YES];
|
||||
|
||||
NSString *refName = [@"refs/tags/" stringByAppendingString:tagName];
|
||||
if (![self.repository checkRefFormat:refName]) {
|
||||
[self.errorMessageField setStringValue:@"Invalid name"];
|
||||
[self.errorMessageField setHidden:NO];
|
||||
return;
|
||||
}
|
||||
|
||||
for (PBGitRevSpecifier *rev in self.repository.branches) {
|
||||
NSString *name = [[rev ref] tagName];
|
||||
if ([tagName isEqualToString:name]) {
|
||||
[self.errorMessageField setStringValue:@"Tag already exists"];
|
||||
[self.errorMessageField setHidden:NO];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[self closeCreateTagSheet:sender];
|
||||
|
||||
NSString *message = [self.tagMessageText string];
|
||||
[self.repository createTag:tagName message:message atRefish:self.targetRefish];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction) closeCreateTagSheet:(id)sender
|
||||
{
|
||||
[NSApp endSheet:[self window]];
|
||||
[[self window] orderOut:self];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -8,11 +8,14 @@
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@class PBGitCommit;
|
||||
|
||||
@interface PBDiffWindowController : NSWindowController {
|
||||
NSString *diff;
|
||||
}
|
||||
|
||||
- initWithDiff:(NSString *)diff;
|
||||
+ (void) showDiffWindowWithFiles:(NSArray *)filePaths fromCommit:(PBGitCommit *)startCommit diffCommit:(PBGitCommit *)diffCommit;
|
||||
- (id) initWithDiff:(NSString *)diff;
|
||||
|
||||
@property (readonly) NSString *diff;
|
||||
@end
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
//
|
||||
|
||||
#import "PBDiffWindowController.h"
|
||||
#import "PBGitRepository.h"
|
||||
#import "PBGitCommit.h"
|
||||
|
||||
|
||||
@implementation PBDiffWindowController
|
||||
@@ -21,4 +23,32 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
+ (void) showDiffWindowWithFiles:(NSArray *)filePaths fromCommit:(PBGitCommit *)startCommit diffCommit:(PBGitCommit *)diffCommit
|
||||
{
|
||||
if (!startCommit)
|
||||
return;
|
||||
|
||||
if (!diffCommit)
|
||||
diffCommit = [startCommit.repository headCommit];
|
||||
|
||||
NSString *commitSelector = [NSString stringWithFormat:@"%@..%@", [startCommit realSha], [diffCommit realSha]];
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"diff", commitSelector, nil];
|
||||
if (filePaths) {
|
||||
[arguments addObject:@"--"];
|
||||
[arguments addObjectsFromArray:filePaths];
|
||||
}
|
||||
|
||||
int retValue;
|
||||
NSString *diff = [startCommit.repository outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSLog(@"diff failed with retValue: %d for command: '%@' output: '%@'", retValue, [arguments componentsJoinedByString:@" "], diff);
|
||||
return;
|
||||
}
|
||||
|
||||
PBDiffWindowController *diffController = [[PBDiffWindowController alloc] initWithDiff:[diff copy]];
|
||||
[diffController showWindow:nil];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -50,8 +50,7 @@
|
||||
|
||||
NSPipe* pipe = [NSPipe pipe];
|
||||
[task setStandardOutput:pipe];
|
||||
[task setStandardError:pipe];
|
||||
|
||||
[task setStandardError:pipe];
|
||||
return task;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,14 @@
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBGitRepository.h"
|
||||
#import "PBGitTree.h"
|
||||
#import "PBGitRefish.h"
|
||||
#include "git/oid.h"
|
||||
|
||||
@interface PBGitCommit : NSObject {
|
||||
|
||||
extern NSString * const kGitXCommitType;
|
||||
|
||||
|
||||
@interface PBGitCommit : NSObject <PBGitRefish> {
|
||||
git_oid sha;
|
||||
git_oid *parentShas;
|
||||
int nParents;
|
||||
@@ -21,6 +26,7 @@
|
||||
NSString* details;
|
||||
NSString *_patch;
|
||||
NSArray* parents;
|
||||
NSString *realSHA;
|
||||
|
||||
int timestamp;
|
||||
char sign;
|
||||
@@ -28,12 +34,21 @@
|
||||
PBGitRepository* repository;
|
||||
}
|
||||
|
||||
+ commitWithRepository:(PBGitRepository*)repo andSha:(git_oid)newSha;
|
||||
- initWithRepository:(PBGitRepository *)repo andSha:(git_oid)sha;
|
||||
|
||||
- (void)addRef:(PBGitRef *)ref;
|
||||
- (void)removeRef:(id)ref;
|
||||
- (BOOL) hasRef:(PBGitRef *)ref;
|
||||
|
||||
- (NSString *)realSha;
|
||||
- (BOOL) isOnSameBranchAs:(PBGitCommit *)other;
|
||||
- (BOOL) isOnHeadBranch;
|
||||
|
||||
// <PBGitRefish>
|
||||
- (NSString *) refishName;
|
||||
- (NSString *) shortName;
|
||||
- (NSString *) refishType;
|
||||
|
||||
@property (readonly) git_oid *sha;
|
||||
@property (copy) NSString* subject;
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
#import "PBGitCommit.h"
|
||||
#import "PBGitDefaults.h"
|
||||
|
||||
|
||||
NSString * const kGitXCommitType = @"commit";
|
||||
|
||||
|
||||
@implementation PBGitCommit
|
||||
|
||||
@synthesize repository, subject, timestamp, author, parentShas, nParents, sign, lineInfo;
|
||||
@@ -111,6 +115,11 @@
|
||||
return &sha;
|
||||
}
|
||||
|
||||
+ commitWithRepository:(PBGitRepository*)repo andSha:(git_oid)newSha
|
||||
{
|
||||
return [[[self alloc] initWithRepository:repo andSha:newSha] autorelease];
|
||||
}
|
||||
|
||||
- initWithRepository:(PBGitRepository*) repo andSha:(git_oid)newSha
|
||||
{
|
||||
details = nil;
|
||||
@@ -121,10 +130,32 @@
|
||||
|
||||
- (NSString *)realSha
|
||||
{
|
||||
char *hex = git_oid_allocfmt(&sha);
|
||||
NSString *str = [NSString stringWithUTF8String:hex];
|
||||
free(hex);
|
||||
return str;
|
||||
if (!realSHA) {
|
||||
char *hex = git_oid_mkhex(&sha);
|
||||
realSHA = [NSString stringWithUTF8String:hex];
|
||||
free(hex);
|
||||
}
|
||||
|
||||
return realSHA;
|
||||
}
|
||||
|
||||
- (BOOL) isOnSameBranchAs:(PBGitCommit *)other
|
||||
{
|
||||
if (!other)
|
||||
return NO;
|
||||
|
||||
NSString *mySHA = [self realSha];
|
||||
NSString *otherSHA = [other realSha];
|
||||
|
||||
if ([otherSHA isEqualToString:mySHA])
|
||||
return YES;
|
||||
|
||||
return [repository isOnSameBranch:otherSHA asSHA:mySHA];
|
||||
}
|
||||
|
||||
- (BOOL) isOnHeadBranch
|
||||
{
|
||||
return [self isOnSameBranchAs:[repository headCommit]];
|
||||
}
|
||||
|
||||
// FIXME: Remove this method once it's unused.
|
||||
@@ -165,6 +196,18 @@
|
||||
[self.refs removeObject:ref];
|
||||
}
|
||||
|
||||
- (BOOL) hasRef:(PBGitRef *)ref
|
||||
{
|
||||
if (!self.refs)
|
||||
return NO;
|
||||
|
||||
for (PBGitRef *existingRef in self.refs)
|
||||
if ([existingRef isEqualToRef:ref])
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (NSMutableArray *)refs
|
||||
{
|
||||
return [[repository refs] objectForKey:[self realSha]];
|
||||
@@ -189,4 +232,23 @@
|
||||
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark <PBGitRefish>
|
||||
|
||||
- (NSString *) refishName
|
||||
{
|
||||
return [self realSha];
|
||||
}
|
||||
|
||||
- (NSString *) shortName
|
||||
{
|
||||
return [[self realSha] substringToIndex:10];
|
||||
}
|
||||
|
||||
- (NSString *) refishType
|
||||
{
|
||||
return kGitXCommitType;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -19,17 +19,13 @@
|
||||
IBOutlet NSTextView *commitMessageView;
|
||||
IBOutlet NSArrayController *unstagedFilesController;
|
||||
IBOutlet NSArrayController *cachedFilesController;
|
||||
IBOutlet NSButton *commitButton;
|
||||
|
||||
IBOutlet PBGitIndexController *indexController;
|
||||
IBOutlet PBWebChangesController *webController;
|
||||
|
||||
NSString *status;
|
||||
BOOL busy;
|
||||
}
|
||||
|
||||
@property(copy) NSString *status;
|
||||
@property(readonly) PBGitIndex *index;
|
||||
@property(assign) BOOL busy;
|
||||
|
||||
- (IBAction) refresh:(id) sender;
|
||||
- (IBAction) commit:(id) sender;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
@implementation PBGitCommitController
|
||||
|
||||
@synthesize status, index, busy;
|
||||
@synthesize index;
|
||||
|
||||
- (id)initWithRepository:(PBGitRepository *)theRepository superController:(PBGitWindowController *)controller
|
||||
{
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
- (void) refresh:(id) sender
|
||||
{
|
||||
self.busy = YES;
|
||||
self.isBusy = YES;
|
||||
self.status = @"Refreshing index…";
|
||||
[index refresh];
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
[cachedFilesController setSelectionIndexes:[NSIndexSet indexSet]];
|
||||
[unstagedFilesController setSelectionIndexes:[NSIndexSet indexSet]];
|
||||
|
||||
self.busy = YES;
|
||||
self.isBusy = YES;
|
||||
[commitMessageView setEditable:NO];
|
||||
|
||||
[index commitWithMessage:commitMessage];
|
||||
@@ -137,7 +137,7 @@
|
||||
# pragma mark PBGitIndex Notification handling
|
||||
- (void)refreshFinished:(NSNotification *)notification
|
||||
{
|
||||
self.busy = NO;
|
||||
self.isBusy = NO;
|
||||
self.status = @"Index refresh finished";
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
- (void)commitFailed:(NSNotification *)notification
|
||||
{
|
||||
self.busy = NO;
|
||||
self.isBusy = NO;
|
||||
NSString *reason = [[notification userInfo] objectForKey:@"description"];
|
||||
self.status = [@"Commit failed: " stringByAppendingString:reason];
|
||||
[commitMessageView setEditable:YES];
|
||||
@@ -177,6 +177,12 @@
|
||||
{
|
||||
[cachedFilesController rearrangeObjects];
|
||||
[unstagedFilesController rearrangeObjects];
|
||||
if ([[cachedFilesController arrangedObjects] count]) {
|
||||
[commitButton setEnabled:YES];
|
||||
} else {
|
||||
[commitButton setEnabled:NO];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)indexOperationFailed:(NSNotification *)notification
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1050</int>
|
||||
<string key="IBDocument.SystemVersion">10B504</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">740</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.2</string>
|
||||
<string key="IBDocument.HIToolboxVersion">437.00</string>
|
||||
<string key="IBDocument.SystemVersion">10C540</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">762</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.25</string>
|
||||
<string key="IBDocument.HIToolboxVersion">458.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
@@ -15,14 +15,13 @@
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>740</string>
|
||||
<string>740</string>
|
||||
<string>762</string>
|
||||
<string>762</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="186"/>
|
||||
<integer value="225"/>
|
||||
<integer value="1"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
@@ -54,42 +53,6 @@
|
||||
<int key="NSvFlags">274</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSTextField" id="1073221655">
|
||||
<reference key="NSNextResponder" ref="750704519"/>
|
||||
<int key="NSvFlags">292</int>
|
||||
<string key="NSFrame">{{27, 7}, {305, 17}}</string>
|
||||
<reference key="NSSuperview" ref="750704519"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="1003368966">
|
||||
<int key="NSCellFlags">67239488</int>
|
||||
<int key="NSCellFlags2">272630784</int>
|
||||
<string key="NSContents">Ready to commit</string>
|
||||
<object class="NSFont" key="NSSupport" id="554612341">
|
||||
<string key="NSName">LucidaGrande</string>
|
||||
<double key="NSSize">13</double>
|
||||
<int key="NSfFlags">1044</int>
|
||||
</object>
|
||||
<reference key="NSControlView" ref="1073221655"/>
|
||||
<object class="NSColor" key="NSBackgroundColor">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlColor</string>
|
||||
<object class="NSColor" key="NSColor" id="500580906">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSTextColor" id="132492410">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlTextColor</string>
|
||||
<object class="NSColor" key="NSColor" id="123758511">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSSplitView" id="812432808">
|
||||
<reference key="NSNextResponder" ref="750704519"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
@@ -119,7 +82,7 @@
|
||||
<string>public.url-name</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{852, 219}</string>
|
||||
<string key="NSFrameSize">{852, 181}</string>
|
||||
<reference key="NSSuperview" ref="812432808"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<string key="FrameName"/>
|
||||
@@ -173,7 +136,7 @@
|
||||
<object class="NSTableView" id="588180404">
|
||||
<reference key="NSNextResponder" ref="614437325"/>
|
||||
<int key="NSvFlags">4352</int>
|
||||
<string key="NSFrameSize">{189, 148}</string>
|
||||
<string key="NSFrameSize">{189, 221}</string>
|
||||
<reference key="NSSuperview" ref="614437325"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="_NSCornerView" key="NSCornerView">
|
||||
@@ -209,7 +172,10 @@
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">headerTextColor</string>
|
||||
<reference key="NSColor" ref="123758511"/>
|
||||
<object class="NSColor" key="NSColor" id="123758511">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSTextFieldCell" key="NSDataCell" id="45690317">
|
||||
@@ -222,9 +188,17 @@
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlBackgroundColor</string>
|
||||
<reference key="NSColor" ref="500580906"/>
|
||||
<object class="NSColor" key="NSColor" id="500580906">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSTextColor" id="132492410">
|
||||
<int key="NSColorSpace">6</int>
|
||||
<string key="NSCatalogName">System</string>
|
||||
<string key="NSColorName">controlTextColor</string>
|
||||
<reference key="NSColor" ref="123758511"/>
|
||||
</object>
|
||||
<reference key="NSTextColor" ref="132492410"/>
|
||||
</object>
|
||||
<int key="NSResizingMask">3</int>
|
||||
<bool key="NSIsResizeable">YES</bool>
|
||||
@@ -254,7 +228,7 @@
|
||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{1, 1}, {189, 148}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {189, 221}}</string>
|
||||
<reference key="NSSuperview" ref="563607114"/>
|
||||
<reference key="NSNextKeyView" ref="588180404"/>
|
||||
<reference key="NSDocView" ref="588180404"/>
|
||||
@@ -281,7 +255,7 @@
|
||||
<double key="NSPercent">0.99470899999999995</double>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{-1, -1}, {191, 150}}</string>
|
||||
<string key="NSFrame">{{-1, -1}, {191, 223}}</string>
|
||||
<reference key="NSSuperview" ref="663963274"/>
|
||||
<reference key="NSNextKeyView" ref="614437325"/>
|
||||
<int key="NSsFlags">562</int>
|
||||
@@ -291,11 +265,11 @@
|
||||
<bytes key="NSScrollAmts">QSAAAEEgAABBiAAAQYgAAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{190, 154}</string>
|
||||
<string key="NSFrameSize">{190, 227}</string>
|
||||
<reference key="NSSuperview" ref="208180574"/>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{190, 169}</string>
|
||||
<string key="NSFrameSize">{190, 242}</string>
|
||||
<reference key="NSSuperview" ref="217294340"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
@@ -340,7 +314,11 @@
|
||||
<int key="NSCellFlags">67239424</int>
|
||||
<int key="NSCellFlags2">134217728</int>
|
||||
<string key="NSContents">Commit</string>
|
||||
<reference key="NSSupport" ref="554612341"/>
|
||||
<object class="NSFont" key="NSSupport" id="554612341">
|
||||
<string key="NSName">LucidaGrande</string>
|
||||
<double key="NSSize">13</double>
|
||||
<int key="NSfFlags">1044</int>
|
||||
</object>
|
||||
<reference key="NSControlView" ref="792511503"/>
|
||||
<int key="NSButtonFlags">-2038284033</int>
|
||||
<int key="NSButtonFlags2">301990017</int>
|
||||
@@ -373,6 +351,7 @@
|
||||
<string>Apple PNG pasteboard type</string>
|
||||
<string>Apple URL pasteboard type</string>
|
||||
<string>CorePasteboardFlavorType 0x6D6F6F76</string>
|
||||
<string>CorePasteboardFlavorType 0x75726C20</string>
|
||||
<string>NSColor pasteboard type</string>
|
||||
<string>NSFilenamesPboardType</string>
|
||||
<string>NSStringPboardType</string>
|
||||
@@ -386,7 +365,7 @@
|
||||
<string>public.url</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{427, 60}</string>
|
||||
<string key="NSFrameSize">{427, 41}</string>
|
||||
<reference key="NSSuperview" ref="245211955"/>
|
||||
<object class="NSTextContainer" key="NSTextContainer" id="311869542">
|
||||
<object class="NSLayoutManager" key="NSLayoutManager">
|
||||
@@ -408,7 +387,7 @@
|
||||
<int key="NSTCFlags">1</int>
|
||||
</object>
|
||||
<object class="NSTextViewSharedData" key="NSSharedData">
|
||||
<int key="NSFlags">11235</int>
|
||||
<int key="NSFlags">3971</int>
|
||||
<int key="NSTextCheckingTypes">0</int>
|
||||
<nil key="NSMarkedAttributes"/>
|
||||
<reference key="NSBackgroundColor" ref="818038086"/>
|
||||
@@ -460,7 +439,7 @@
|
||||
<nil key="NSDelegate"/>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{1, 1}, {427, 111}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {427, 184}}</string>
|
||||
<reference key="NSSuperview" ref="227052526"/>
|
||||
<reference key="NSNextKeyView" ref="1023793991"/>
|
||||
<reference key="NSDocView" ref="1023793991"/>
|
||||
@@ -492,7 +471,7 @@
|
||||
<double key="NSPercent">0.94565220000000005</double>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{0, 36}, {429, 113}}</string>
|
||||
<string key="NSFrame">{{0, 36}, {429, 186}}</string>
|
||||
<reference key="NSSuperview" ref="154221104"/>
|
||||
<reference key="NSNextKeyView" ref="245211955"/>
|
||||
<int key="NSsFlags">530</int>
|
||||
@@ -503,7 +482,7 @@
|
||||
<object class="NSButton" id="18874447">
|
||||
<reference key="NSNextResponder" ref="154221104"/>
|
||||
<int key="NSvFlags">292</int>
|
||||
<string key="NSFrame">{{-2, 9}, {76, 18}}</string>
|
||||
<string key="NSFrame">{{-2, 9}, {82, 18}}</string>
|
||||
<reference key="NSSuperview" ref="154221104"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="475684116">
|
||||
@@ -548,11 +527,11 @@
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{429, 154}</string>
|
||||
<string key="NSFrameSize">{429, 227}</string>
|
||||
<reference key="NSSuperview" ref="635871052"/>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{199, 0}, {429, 169}}</string>
|
||||
<string key="NSFrame">{{199, 0}, {429, 242}}</string>
|
||||
<reference key="NSSuperview" ref="217294340"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
@@ -595,7 +574,7 @@
|
||||
<object class="NSTableView" id="638535043">
|
||||
<reference key="NSNextResponder" ref="551030904"/>
|
||||
<int key="NSvFlags">4352</int>
|
||||
<string key="NSFrameSize">{214, 148}</string>
|
||||
<string key="NSFrameSize">{214, 221}</string>
|
||||
<reference key="NSSuperview" ref="551030904"/>
|
||||
<int key="NSTag">1</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
@@ -648,7 +627,7 @@
|
||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{1, 1}, {214, 148}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {214, 221}}</string>
|
||||
<reference key="NSSuperview" ref="617511385"/>
|
||||
<reference key="NSNextKeyView" ref="638535043"/>
|
||||
<reference key="NSDocView" ref="638535043"/>
|
||||
@@ -675,7 +654,7 @@
|
||||
<double key="NSPercent">0.90033220000000003</double>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{0, -1}, {216, 150}}</string>
|
||||
<string key="NSFrame">{{0, -1}, {216, 223}}</string>
|
||||
<reference key="NSSuperview" ref="559277910"/>
|
||||
<reference key="NSNextKeyView" ref="551030904"/>
|
||||
<int key="NSsFlags">562</int>
|
||||
@@ -685,11 +664,11 @@
|
||||
<bytes key="NSScrollAmts">QSAAAEEgAABBiAAAQYgAAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{215, 154}</string>
|
||||
<string key="NSFrameSize">{215, 227}</string>
|
||||
<reference key="NSSuperview" ref="955377287"/>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{637, 0}, {215, 169}}</string>
|
||||
<string key="NSFrame">{{637, 0}, {215, 242}}</string>
|
||||
<reference key="NSSuperview" ref="217294340"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
@@ -710,25 +689,15 @@
|
||||
<bool key="NSTransparent">NO</bool>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{0, 228}, {852, 169}}</string>
|
||||
<string key="NSFrame">{{0, 190}, {852, 242}}</string>
|
||||
<reference key="NSSuperview" ref="812432808"/>
|
||||
<bool key="NSIsVertical">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrame">{{0, 35}, {852, 397}}</string>
|
||||
<string key="NSFrameSize">{852, 432}</string>
|
||||
<reference key="NSSuperview" ref="750704519"/>
|
||||
<string key="NSAutosaveName">CommitViewSplitView</string>
|
||||
</object>
|
||||
<object class="NSProgressIndicator" id="221814497">
|
||||
<reference key="NSNextResponder" ref="750704519"/>
|
||||
<int key="NSvFlags">1316</int>
|
||||
<object class="NSPSMatrix" key="NSDrawMatrix"/>
|
||||
<string key="NSFrame">{{6, 7}, {16, 16}}</string>
|
||||
<reference key="NSSuperview" ref="750704519"/>
|
||||
<int key="NSpiFlags">28938</int>
|
||||
<double key="NSMinValue">16</double>
|
||||
<double key="NSMaxValue">100</double>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{852, 432}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
@@ -767,133 +736,6 @@
|
||||
<object class="NSCustomObject" id="1007648253">
|
||||
<string key="NSClassName">PBWebChangesController</string>
|
||||
</object>
|
||||
<object class="NSToolbar" id="570289088">
|
||||
<object class="NSMutableString" key="NSToolbarIdentifier">
|
||||
<characters key="NS.bytes">F94591D2-A188-4B08-A8B2-8C8CEC03CB14</characters>
|
||||
</object>
|
||||
<nil key="NSToolbarDelegate"/>
|
||||
<bool key="NSToolbarPrefersToBeShown">YES</bool>
|
||||
<bool key="NSToolbarShowsBaselineSeparator">YES</bool>
|
||||
<bool key="NSToolbarAllowsUserCustomization">YES</bool>
|
||||
<bool key="NSToolbarAutosavesConfiguration">YES</bool>
|
||||
<int key="NSToolbarDisplayMode">1</int>
|
||||
<int key="NSToolbarSizeMode">1</int>
|
||||
<object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>1E431E79-1591-49E7-9E17-49497CA4622A</string>
|
||||
<string>NSToolbarSeparatorItem</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSToolbarItem" id="271300712">
|
||||
<object class="NSMutableString" key="NSToolbarItemIdentifier">
|
||||
<characters key="NS.bytes">1E431E79-1591-49E7-9E17-49497CA4622A</characters>
|
||||
</object>
|
||||
<string key="NSToolbarItemLabel">View</string>
|
||||
<string key="NSToolbarItemPaletteLabel">View selector</string>
|
||||
<nil key="NSToolbarItemToolTip"/>
|
||||
<object class="NSSegmentedControl" key="NSToolbarItemView" id="20026036">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{0, 14}, {87, 25}}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<int key="NSTag">3</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSSegmentedCell" key="NSCell" id="796615469">
|
||||
<int key="NSCellFlags">67239424</int>
|
||||
<int key="NSCellFlags2">0</int>
|
||||
<reference key="NSSupport" ref="554612341"/>
|
||||
<reference key="NSControlView" ref="20026036"/>
|
||||
<object class="NSMutableArray" key="NSSegmentImages">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSSegmentItem">
|
||||
<double key="NSSegmentItemWidth">40</double>
|
||||
<object class="NSCustomResource" key="NSSegmentItemImage">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">HistoryViewTemplate</string>
|
||||
</object>
|
||||
<string key="NSSegmentItemLabel"/>
|
||||
<string key="NSSegmentItemTooltip">History View</string>
|
||||
<int key="NSSegmentItemImageScaling">0</int>
|
||||
</object>
|
||||
<object class="NSSegmentItem">
|
||||
<double key="NSSegmentItemWidth">40</double>
|
||||
<object class="NSCustomResource" key="NSSegmentItemImage">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">CommitViewTemplate</string>
|
||||
</object>
|
||||
<string key="NSSegmentItemLabel"/>
|
||||
<string key="NSSegmentItemTooltip">Commit View</string>
|
||||
<bool key="NSSegmentItemSelected">YES</bool>
|
||||
<int key="NSSegmentItemImageScaling">0</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="NSSelectedSegment">1</int>
|
||||
<int key="NSSegmentStyle">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="NSToolbarItemImage"/>
|
||||
<nil key="NSToolbarItemTarget"/>
|
||||
<nil key="NSToolbarItemAction"/>
|
||||
<string key="NSToolbarItemMinSize">{87, 25}</string>
|
||||
<string key="NSToolbarItemMaxSize">{87, 25}</string>
|
||||
<bool key="NSToolbarItemEnabled">YES</bool>
|
||||
<bool key="NSToolbarItemAutovalidates">YES</bool>
|
||||
<int key="NSToolbarItemTag">3</int>
|
||||
<bool key="NSToolbarIsUserRemovable">YES</bool>
|
||||
<int key="NSToolbarItemVisibilityPriority">0</int>
|
||||
</object>
|
||||
<object class="NSToolbarSeparatorItem" id="354340151">
|
||||
<string key="NSToolbarItemIdentifier">NSToolbarSeparatorItem</string>
|
||||
<string key="NSToolbarItemLabel"/>
|
||||
<string key="NSToolbarItemPaletteLabel">Separator</string>
|
||||
<nil key="NSToolbarItemToolTip"/>
|
||||
<nil key="NSToolbarItemView"/>
|
||||
<nil key="NSToolbarItemImage"/>
|
||||
<nil key="NSToolbarItemTarget"/>
|
||||
<nil key="NSToolbarItemAction"/>
|
||||
<string key="NSToolbarItemMinSize">{12, 5}</string>
|
||||
<string key="NSToolbarItemMaxSize">{12, 1000}</string>
|
||||
<bool key="NSToolbarItemEnabled">YES</bool>
|
||||
<bool key="NSToolbarItemAutovalidates">YES</bool>
|
||||
<int key="NSToolbarItemTag">-1</int>
|
||||
<bool key="NSToolbarIsUserRemovable">YES</bool>
|
||||
<int key="NSToolbarItemVisibilityPriority">0</int>
|
||||
<object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation">
|
||||
<bool key="NSIsDisabled">YES</bool>
|
||||
<bool key="NSIsSeparator">YES</bool>
|
||||
<string key="NSTitle"/>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSKeyEquivModMask">1048576</int>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<object class="NSCustomResource" key="NSOnImage">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">NSMenuCheckmark</string>
|
||||
</object>
|
||||
<object class="NSCustomResource" key="NSMixedImage">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">NSMenuMixedState</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSArray" key="NSToolbarIBAllowedItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="271300712"/>
|
||||
<reference ref="354340151"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="NSToolbarIBDefaultItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="271300712"/>
|
||||
<reference ref="354340151"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="NSToolbarIBSelectableItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="446885874">
|
||||
<string key="NSClassName">PBGitIndexController</string>
|
||||
</object>
|
||||
@@ -1013,46 +855,6 @@
|
||||
</object>
|
||||
<int key="connectionID">213</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">value: status</string>
|
||||
<reference key="source" ref="1073221655"/>
|
||||
<reference key="destination" ref="1001"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="1073221655"/>
|
||||
<reference key="NSDestination" ref="1001"/>
|
||||
<string key="NSLabel">value: status</string>
|
||||
<string key="NSBinding">value</string>
|
||||
<string key="NSKeyPath">status</string>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="connectionID">216</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">animate: busy</string>
|
||||
<reference key="source" ref="221814497"/>
|
||||
<reference key="destination" ref="1001"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="221814497"/>
|
||||
<reference key="NSDestination" ref="1001"/>
|
||||
<string key="NSLabel">animate: busy</string>
|
||||
<string key="NSBinding">animate</string>
|
||||
<string key="NSKeyPath">busy</string>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="connectionID">222</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">viewToolbar</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="570289088"/>
|
||||
</object>
|
||||
<int key="connectionID">241</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">webController</string>
|
||||
@@ -1221,6 +1023,14 @@
|
||||
</object>
|
||||
<int key="connectionID">283</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">commitButton</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="792511503"/>
|
||||
</object>
|
||||
<int key="connectionID">307</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
@@ -1255,8 +1065,6 @@
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="812432808"/>
|
||||
<reference ref="221814497"/>
|
||||
<reference ref="1073221655"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
@@ -1283,21 +1091,6 @@
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Diff Controller</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="1073221655"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="1003368966"/>
|
||||
</object>
|
||||
<reference key="parent" ref="750704519"/>
|
||||
<string key="objectName">Status label</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">42</int>
|
||||
<reference key="object" ref="1003368966"/>
|
||||
<reference key="parent" ref="1073221655"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">186</int>
|
||||
<reference key="object" ref="812432808"/>
|
||||
@@ -1482,50 +1275,6 @@
|
||||
<reference key="object" ref="39450212"/>
|
||||
<reference key="parent" ref="79177434"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">217</int>
|
||||
<reference key="object" ref="221814497"/>
|
||||
<reference key="parent" ref="750704519"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">225</int>
|
||||
<reference key="object" ref="570289088"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="271300712"/>
|
||||
<reference ref="354340151"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Commit Toolbar</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">226</int>
|
||||
<reference key="object" ref="271300712"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="20026036"/>
|
||||
</object>
|
||||
<reference key="parent" ref="570289088"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">227</int>
|
||||
<reference key="object" ref="354340151"/>
|
||||
<reference key="parent" ref="570289088"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">239</int>
|
||||
<reference key="object" ref="20026036"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="796615469"/>
|
||||
</object>
|
||||
<reference key="parent" ref="271300712"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">240</int>
|
||||
<reference key="object" ref="796615469"/>
|
||||
<reference key="parent" ref="20026036"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">247</int>
|
||||
<reference key="object" ref="18874447"/>
|
||||
@@ -1586,23 +1335,14 @@
|
||||
<string>164.IBPluginDependency</string>
|
||||
<string>186.CustomClassName</string>
|
||||
<string>186.IBPluginDependency</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>206.IBPluginDependency</string>
|
||||
<string>207.IBPluginDependency</string>
|
||||
<string>208.IBPluginDependency</string>
|
||||
<string>209.IBPluginDependency</string>
|
||||
<string>217.IBPluginDependency</string>
|
||||
<string>225.IBEditorWindowLastContentRect</string>
|
||||
<string>225.IBPluginDependency</string>
|
||||
<string>225.editorWindowContentRectSynchronizationRect</string>
|
||||
<string>226.IBPluginDependency</string>
|
||||
<string>239.IBPluginDependency</string>
|
||||
<string>240.IBPluginDependency</string>
|
||||
<string>247.IBPluginDependency</string>
|
||||
<string>248.IBPluginDependency</string>
|
||||
<string>278.IBPluginDependency</string>
|
||||
<string>279.IBPluginDependency</string>
|
||||
<string>42.IBPluginDependency</string>
|
||||
<string>45.IBPluginDependency</string>
|
||||
<string>46.IBPluginDependency</string>
|
||||
<string>47.IBPluginDependency</string>
|
||||
@@ -1620,7 +1360,7 @@
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{494, 673}, {852, 432}}</string>
|
||||
<string>{{1091, 655}, {852, 432}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<integer value="0"/>
|
||||
<integer value="0"/>
|
||||
@@ -1646,15 +1386,6 @@
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{441, 278}, {616, 169}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{132, 614}, {616, 0}}</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>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</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>
|
||||
@@ -1688,7 +1419,7 @@
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">306</int>
|
||||
<int key="maxID">311</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
@@ -1732,6 +1463,7 @@
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>cachedFilesController</string>
|
||||
<string>commitButton</string>
|
||||
<string>commitMessageView</string>
|
||||
<string>indexController</string>
|
||||
<string>unstagedFilesController</string>
|
||||
@@ -1740,6 +1472,7 @@
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSArrayController</string>
|
||||
<string>NSButton</string>
|
||||
<string>NSTextView</string>
|
||||
<string>PBGitIndexController</string>
|
||||
<string>NSArrayController</string>
|
||||
@@ -1814,10 +1547,6 @@
|
||||
<string key="NS.key.0">refresh:</string>
|
||||
<string key="NS.object.0">id</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<string key="NS.key.0">viewToolbar</string>
|
||||
<string key="NS.object.0">NSToolbar</string>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">PBViewController.h</string>
|
||||
@@ -1883,21 +1612,21 @@
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="931133159">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="921751348">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="627287896">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="266447715">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="851486898">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="493862803">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
|
||||
</object>
|
||||
@@ -1966,7 +1695,7 @@
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSControl</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="259892116">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="577468461">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
|
||||
</object>
|
||||
@@ -1998,7 +1727,7 @@
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSMenu</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="909835492">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="726877526">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
|
||||
</object>
|
||||
@@ -2012,19 +1741,19 @@
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="931133159"/>
|
||||
<reference key="sourceIdentifier" ref="921751348"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="627287896"/>
|
||||
<reference key="sourceIdentifier" ref="266447715"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="851486898"/>
|
||||
<reference key="sourceIdentifier" ref="493862803"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="259892116"/>
|
||||
<reference key="sourceIdentifier" ref="577468461"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
@@ -2063,7 +1792,7 @@
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="909835492"/>
|
||||
<reference key="sourceIdentifier" ref="726877526"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
@@ -2095,21 +1824,21 @@
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="506270582">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="126001463">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="948037462">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="406118673">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="602490145">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
|
||||
</object>
|
||||
@@ -2247,69 +1976,6 @@
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">ImageKit.framework/Headers/IKImageBrowserView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">ImageKit.framework/Headers/IKSaveOptions.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">ImageKit.framework/Headers/ImageKitDeprecated.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">PDFKit.framework/Headers/PDFDocument.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">PDFKit.framework/Headers/PDFView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QuartzComposer.framework/Headers/QCCompositionParameterView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QuartzComposer.framework/Headers/QCCompositionPickerView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QuartzFilters.framework/Headers/QuartzFilterManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QuickLookUI.framework/Headers/QLPreviewPanel.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
@@ -2402,14 +2068,6 @@
|
||||
<string key="minorKey">AppKit.framework/Headers/NSObjectController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSProgressIndicator</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSProgressIndicator.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
@@ -2441,22 +2099,6 @@
|
||||
<string key="minorKey">AppKit.framework/Headers/NSScroller.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSSegmentedCell</string>
|
||||
<string key="superclassName">NSActionCell</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSSegmentedCell.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSSegmentedControl</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSSegmentedControl.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSSplitView</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
@@ -2476,7 +2118,7 @@
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTableView</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<reference key="sourceIdentifier" ref="506270582"/>
|
||||
<reference key="sourceIdentifier" ref="126001463"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSText</string>
|
||||
@@ -2486,14 +2128,6 @@
|
||||
<string key="minorKey">AppKit.framework/Headers/NSText.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextField</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTextFieldCell</string>
|
||||
<string key="superclassName">NSActionCell</string>
|
||||
@@ -2510,19 +2144,6 @@
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSToolbar</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSToolbarItem</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="948037462"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSUserDefaultsController</string>
|
||||
<string key="superclassName">NSController</string>
|
||||
@@ -2555,7 +2176,7 @@
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<reference key="sourceIdentifier" ref="406118673"/>
|
||||
<reference key="sourceIdentifier" ref="602490145"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSViewController</string>
|
||||
@@ -2611,13 +2232,14 @@
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1050" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1060" key="NS.object.0"/>
|
||||
<integer value="1050" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
@@ -2626,5 +2248,9 @@
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<string key="IBDocument.LastKnownRelativeProjectPath">GitX.xcodeproj</string>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
|
||||
<string key="NS.key.0">NSSwitch</string>
|
||||
<string key="NS.object.0">{15, 15}</string>
|
||||
</object>
|
||||
</data>
|
||||
</archive>
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
}
|
||||
@property (copy) NSString *repositoryPath;
|
||||
- init;
|
||||
- initWithRepository:(NSString *)path;
|
||||
- initWithRepositoryPath:(NSString *)path;
|
||||
@end
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- initWithRepository:(NSString *)path
|
||||
- initWithRepositoryPath:(NSString *)path
|
||||
{
|
||||
repositoryPath = path;
|
||||
return self;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
}
|
||||
|
||||
+ (int) commitMessageViewVerticalLineLength;
|
||||
+ (BOOL) commitMessageViewHasVerticalLine;
|
||||
+ (BOOL) isGistEnabled;
|
||||
+ (BOOL) isGravatarEnabled;
|
||||
+ (BOOL) confirmPublicGists;
|
||||
@@ -20,5 +21,19 @@
|
||||
+ (BOOL) refreshAutomatically;
|
||||
+ (BOOL)openCurDirOnLaunch;
|
||||
+ (BOOL)showOpenPanelOnLaunch;
|
||||
+ (BOOL) shouldCheckoutBranch;
|
||||
+ (void) setShouldCheckoutBranch:(BOOL)shouldCheckout;
|
||||
+ (NSString *) recentCloneDestination;
|
||||
+ (void) setRecentCloneDestination:(NSString *)path;
|
||||
+ (BOOL) suppressAcceptDropRef;
|
||||
+ (void) setSuppressAcceptDropRef:(BOOL)suppress;
|
||||
+ (BOOL) showStageView;
|
||||
+ (void) setShowStageView:(BOOL)suppress;
|
||||
+ (BOOL) openPreviousDocumentsOnLaunch;
|
||||
+ (void) setPreviousDocumentPaths:(NSArray *)documentPaths;
|
||||
+ (NSArray *) previousDocumentPaths;
|
||||
+ (void) removePreviousDocumentPaths;
|
||||
+ (NSInteger) branchFilter;
|
||||
+ (void) setBranchFilter:(NSInteger)state;
|
||||
|
||||
@end
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#define kDefaultVerticalLineLength 50
|
||||
#define kCommitMessageViewVerticalLineLength @"PBCommitMessageViewVerticalLineLength"
|
||||
#define kCommitMessageViewHasVerticalLine @"PBCommitMessageViewHasVerticalLine"
|
||||
#define kEnableGist @"PBEnableGist"
|
||||
#define kEnableGravatar @"PBEnableGravatar"
|
||||
#define kConfirmPublicGists @"PBConfirmPublicGists"
|
||||
@@ -18,6 +19,13 @@
|
||||
#define kRefreshAutomatically @"PBRefreshAutomatically"
|
||||
#define kOpenCurDirOnLaunch @"PBOpenCurDirOnLaunch"
|
||||
#define kShowOpenPanelOnLaunch @"PBShowOpenPanelOnLaunch"
|
||||
#define kShouldCheckoutBranch @"PBShouldCheckoutBranch"
|
||||
#define kRecentCloneDestination @"PBRecentCloneDestination"
|
||||
#define kSuppressAcceptDropRef @"PBSuppressAcceptDropRef"
|
||||
#define kShowStageView @"PBShowStageView"
|
||||
#define kOpenPreviousDocumentsOnLaunch @"PBOpenPreviousDocumentsOnLaunch"
|
||||
#define kPreviousDocumentPaths @"PBPreviousDocumentPaths"
|
||||
#define kBranchFilterState @"PBBranchFilter"
|
||||
|
||||
@implementation PBGitDefaults
|
||||
|
||||
@@ -26,6 +34,8 @@
|
||||
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
|
||||
[defaultValues setObject:[NSNumber numberWithInt:kDefaultVerticalLineLength]
|
||||
forKey:kCommitMessageViewVerticalLineLength];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:YES]
|
||||
forKey:kCommitMessageViewHasVerticalLine];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:YES]
|
||||
forKey:kEnableGist];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:YES]
|
||||
@@ -40,6 +50,10 @@
|
||||
forKey:kOpenCurDirOnLaunch];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:YES]
|
||||
forKey:kShowOpenPanelOnLaunch];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:YES]
|
||||
forKey:kShouldCheckoutBranch];
|
||||
[defaultValues setObject:[NSNumber numberWithBool:NO]
|
||||
forKey:kOpenPreviousDocumentsOnLaunch];
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
|
||||
}
|
||||
|
||||
@@ -48,6 +62,11 @@
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:kCommitMessageViewVerticalLineLength];
|
||||
}
|
||||
|
||||
+ (BOOL) commitMessageViewHasVerticalLine
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kCommitMessageViewHasVerticalLine];
|
||||
}
|
||||
|
||||
+ (BOOL) isGistEnabled
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kEnableGist];
|
||||
@@ -88,4 +107,73 @@
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kShowOpenPanelOnLaunch];
|
||||
}
|
||||
|
||||
+ (BOOL) shouldCheckoutBranch
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kShouldCheckoutBranch];
|
||||
}
|
||||
|
||||
+ (void) setShouldCheckoutBranch:(BOOL)shouldCheckout
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setBool:shouldCheckout forKey:kShouldCheckoutBranch];
|
||||
}
|
||||
|
||||
+ (NSString *) recentCloneDestination
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] stringForKey:kRecentCloneDestination];
|
||||
}
|
||||
|
||||
+ (void) setRecentCloneDestination:(NSString *)path
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setObject:path forKey:kRecentCloneDestination];
|
||||
}
|
||||
|
||||
+ (BOOL) suppressAcceptDropRef
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kSuppressAcceptDropRef];
|
||||
}
|
||||
|
||||
+ (void) setSuppressAcceptDropRef:(BOOL)suppress
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] setBool:suppress forKey:kSuppressAcceptDropRef];
|
||||
}
|
||||
|
||||
+ (BOOL) showStageView
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kShowStageView];
|
||||
}
|
||||
|
||||
+ (void) setShowStageView:(BOOL)suppress
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] setBool:suppress forKey:kShowStageView];
|
||||
}
|
||||
|
||||
+ (BOOL) openPreviousDocumentsOnLaunch
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kOpenPreviousDocumentsOnLaunch];
|
||||
}
|
||||
|
||||
+ (void) setPreviousDocumentPaths:(NSArray *)documentPaths
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setObject:documentPaths forKey:kPreviousDocumentPaths];
|
||||
}
|
||||
|
||||
+ (NSArray *) previousDocumentPaths
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] arrayForKey:kPreviousDocumentPaths];
|
||||
}
|
||||
|
||||
+ (void) removePreviousDocumentPaths
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kPreviousDocumentPaths];
|
||||
}
|
||||
+ (NSInteger) branchFilter
|
||||
{
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:kBranchFilterState];
|
||||
}
|
||||
|
||||
+ (void) setBranchFilter:(NSInteger)state
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:state forKey:kBranchFilterState];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitGradientBarView.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/22/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@interface PBGitGradientBarView : NSView {
|
||||
NSGradient *gradient;
|
||||
}
|
||||
|
||||
- (void) setTopShade:(float)topShade bottomShade:(float)bottomShade;
|
||||
- (void) setTopColor:(NSColor *)topShade bottomColor:(NSColor *)bottomColor;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// PBGitGradientBarView.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/22/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitGradientBarView.h"
|
||||
|
||||
|
||||
|
||||
@implementation PBGitGradientBarView
|
||||
|
||||
|
||||
- (id) initWithFrame:(NSRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (!self)
|
||||
return nil;
|
||||
|
||||
[self setTopShade:1.0 bottomShade:0.0];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void) drawRect:(NSRect)dirtyRect
|
||||
{
|
||||
[gradient drawInRect:[self bounds] angle:90];
|
||||
}
|
||||
|
||||
|
||||
- (void) setTopColor:(NSColor *)topColor bottomColor:(NSColor *)bottomColor
|
||||
{
|
||||
if (!topColor || !bottomColor)
|
||||
return;
|
||||
|
||||
gradient = [[NSGradient alloc] initWithStartingColor:bottomColor endingColor:topColor];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
|
||||
- (void) setTopShade:(float)topShade bottomShade:(float)bottomShade
|
||||
{
|
||||
NSColor *topColor = [NSColor colorWithCalibratedWhite:topShade alpha:1.0];
|
||||
NSColor *bottomColor = [NSColor colorWithCalibratedWhite:bottomShade alpha:1.0];
|
||||
[self setTopColor:topColor bottomColor:bottomColor];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -14,38 +14,54 @@
|
||||
#import <Quartz/Quartz.h> /* for the QLPreviewPanelDataSource et al. stuff */
|
||||
|
||||
@class PBQLOutlineView;
|
||||
@class PBGitSidebarController;
|
||||
@class PBGitGradientBarView;
|
||||
@class PBRefController;
|
||||
@class QLPreviewPanel;
|
||||
|
||||
@interface PBGitHistoryController : PBViewController <QLPreviewPanelDataSource, QLPreviewPanelDelegate> {
|
||||
IBOutlet NSSearchField *searchField;
|
||||
IBOutlet NSArrayController* commitController;
|
||||
IBOutlet NSTreeController* treeController;
|
||||
IBOutlet NSTableView* commitList;
|
||||
IBOutlet PBQLOutlineView* fileBrowser;
|
||||
IBOutlet PBCollapsibleSplitView *historySplitView;
|
||||
IBOutlet id webView;
|
||||
|
||||
int selectedTab;
|
||||
|
||||
PBGitTree* gitTree;
|
||||
PBGitCommit* webCommit;
|
||||
PBGitCommit* rawCommit;
|
||||
PBGitCommit* realCommit;
|
||||
|
||||
QLPreviewPanel * previewPanel;
|
||||
IBOutlet PBRefController *refController;
|
||||
IBOutlet NSSearchField *searchField;
|
||||
IBOutlet NSArrayController* commitController;
|
||||
IBOutlet NSTreeController* treeController;
|
||||
IBOutlet NSOutlineView* fileBrowser;
|
||||
NSArray *currentFileBrowserSelectionPath;
|
||||
IBOutlet NSTableView* commitList;
|
||||
IBOutlet PBCollapsibleSplitView *historySplitView;
|
||||
QLPreviewPanel* previewPanel;
|
||||
|
||||
IBOutlet PBGitGradientBarView *upperToolbarView;
|
||||
IBOutlet NSButton *mergeButton;
|
||||
IBOutlet NSButton *cherryPickButton;
|
||||
IBOutlet NSButton *rebaseButton;
|
||||
|
||||
IBOutlet PBGitGradientBarView *scopeBarView;
|
||||
IBOutlet NSButton *allBranchesFilterItem;
|
||||
IBOutlet NSButton *localRemoteBranchesFilterItem;
|
||||
IBOutlet NSButton *selectedBranchFilterItem;
|
||||
|
||||
IBOutlet id webView;
|
||||
int selectedCommitDetailsIndex;
|
||||
BOOL forceSelectionUpdate;
|
||||
|
||||
PBGitTree *gitTree;
|
||||
PBGitCommit *webCommit;
|
||||
PBGitCommit *selectedCommit;
|
||||
}
|
||||
|
||||
@property (assign) int selectedTab;
|
||||
@property (retain) PBGitCommit *webCommit, *rawCommit;
|
||||
@property (assign) int selectedCommitDetailsIndex;
|
||||
@property (retain) PBGitCommit *webCommit;
|
||||
@property (retain) PBGitTree* gitTree;
|
||||
@property (readonly) NSArrayController *commitController;
|
||||
@property (readonly) PBRefController *refController;
|
||||
|
||||
- (IBAction) setDetailedView: sender;
|
||||
- (IBAction) setRawView: sender;
|
||||
- (IBAction) setTreeView: sender;
|
||||
- (IBAction) setDetailedView:(id)sender;
|
||||
- (IBAction) setTreeView:(id)sender;
|
||||
- (IBAction) setBranchFilter:(id)sender;
|
||||
|
||||
- (void) selectCommit: (NSString*) commit;
|
||||
- (IBAction) refresh: sender;
|
||||
- (IBAction) toggleQuickView: sender;
|
||||
- (IBAction) toggleQLPreviewPanel:(id)sender;
|
||||
- (IBAction) openSelectedFile: sender;
|
||||
- (void) updateQuicklookForce: (BOOL) force;
|
||||
|
||||
@@ -56,6 +72,14 @@
|
||||
- (void)showInFinderAction:(id)sender;
|
||||
- (void)openFilesAction:(id)sender;
|
||||
|
||||
// Repository Methods
|
||||
- (IBAction) createBranch:(id)sender;
|
||||
- (IBAction) createTag:(id)sender;
|
||||
- (IBAction) showAddRemoteSheet:(id)sender;
|
||||
- (IBAction) merge:(id)sender;
|
||||
- (IBAction) cherryPick:(id)sender;
|
||||
- (IBAction) rebase:(id)sender;
|
||||
|
||||
- (void) copyCommitInfo;
|
||||
|
||||
- (BOOL) hasNonlinearPath;
|
||||
|
||||
@@ -12,9 +12,30 @@
|
||||
#import "PBCommitList.h"
|
||||
#import "ApplicationController.h"
|
||||
#import "PBQLOutlineView.h"
|
||||
#import "PBCreateBranchSheet.h"
|
||||
#import "PBCreateTagSheet.h"
|
||||
#import "PBAddRemoteSheet.h"
|
||||
#import "PBGitSidebarController.h"
|
||||
#import "PBGitGradientBarView.h"
|
||||
#import "PBDiffWindowController.h"
|
||||
#import "PBGitDefaults.h"
|
||||
#import "PBGitRevList.h"
|
||||
#define QLPreviewPanel NSClassFromString(@"QLPreviewPanel")
|
||||
#define kHistorySelectedDetailIndexKey @"PBHistorySelectedDetailIndex"
|
||||
#define kHistoryDetailViewIndex 0
|
||||
#define kHistoryTreeViewIndex 1
|
||||
|
||||
@interface PBGitHistoryController ()
|
||||
|
||||
- (void) updateBranchFilterMatrix;
|
||||
- (void) restoreFileBrowserSelection;
|
||||
- (void) saveFileBrowserSelection;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation PBGitHistoryController
|
||||
@synthesize selectedTab, webCommit, rawCommit, gitTree, commitController;
|
||||
@synthesize selectedCommitDetailsIndex, webCommit, gitTree, commitController, refController;
|
||||
|
||||
// MARK: Quick Look panel support
|
||||
|
||||
@@ -120,10 +141,18 @@
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
self.selectedTab = [[NSUserDefaults standardUserDefaults] integerForKey:@"Repository Window Selected Tab Index"];;
|
||||
[commitController addObserver:self forKeyPath:@"selection" options:(NSKeyValueObservingOptionNew,NSKeyValueObservingOptionOld) context:@"commitChange"];
|
||||
self.selectedCommitDetailsIndex = [[NSUserDefaults standardUserDefaults] integerForKey:kHistorySelectedDetailIndexKey];
|
||||
|
||||
[commitController addObserver:self forKeyPath:@"selection" options:0 context:@"commitChange"];
|
||||
[commitController addObserver:self forKeyPath:@"arrangedObjects.@count" options:NSKeyValueObservingOptionInitial context:@"updateCommitCount"];
|
||||
[treeController addObserver:self forKeyPath:@"selection" options:0 context:@"treeChange"];
|
||||
|
||||
[repository.revisionList addObserver:self forKeyPath:@"isUpdating" options:0 context:@"revisionListUpdating"];
|
||||
[repository.revisionList addObserver:self forKeyPath:@"updatedGraph" options:0 context:@"revisionListUpdatedGraph"];
|
||||
[repository addObserver:self forKeyPath:@"currentBranch" options:0 context:@"branchChange"];
|
||||
[repository addObserver:self forKeyPath:@"refs" options:0 context:@"updateRefs"];
|
||||
|
||||
forceSelectionUpdate = YES;
|
||||
NSSize cellSpacing = [commitList intercellSpacing];
|
||||
cellSpacing.height = 0;
|
||||
[commitList setIntercellSpacing:cellSpacing];
|
||||
@@ -142,59 +171,177 @@
|
||||
[[commitList tableColumnWithIdentifier:@"subject"] setSortDescriptorPrototype:[[NSSortDescriptor alloc] initWithKey:@"subject" ascending:YES]];
|
||||
// Add a menu that allows a user to select which columns to view
|
||||
[[commitList headerView] setMenu:[self tableColumnMenu]];
|
||||
[historySplitView setTopMin:33.0 andBottomMin:100.0];
|
||||
[historySplitView setTopMin:58.0 andBottomMin:100.0];
|
||||
[historySplitView uncollapse];
|
||||
|
||||
[upperToolbarView setTopShade:237/255.0 bottomShade:216/255.0];
|
||||
[scopeBarView setTopColor:[NSColor colorWithCalibratedHue:0.579 saturation:0.068 brightness:0.898 alpha:1.000]
|
||||
bottomColor:[NSColor colorWithCalibratedHue:0.579 saturation:0.119 brightness:0.765 alpha:1.000]];
|
||||
//[scopeBarView setTopShade:207/255.0 bottomShade:180/255.0];
|
||||
[self updateBranchFilterMatrix];
|
||||
|
||||
[super awakeFromNib];
|
||||
}
|
||||
|
||||
- (void) updateKeys
|
||||
{
|
||||
NSArray* selection = [commitController selectedObjects];
|
||||
|
||||
// Remove any references in the QLPanel
|
||||
//[[QLPreviewPanel sharedPreviewPanel] setURLs:[NSArray array] currentIndex:0 preservingDisplayState:YES];
|
||||
// We have to do this manually, as NSTreeController leaks memory?
|
||||
//[treeController setSelectionIndexPaths:[NSArray array]];
|
||||
|
||||
if ([selection count] > 0)
|
||||
realCommit = [selection objectAtIndex:0];
|
||||
else
|
||||
realCommit = nil;
|
||||
|
||||
self.webCommit = nil;
|
||||
self.rawCommit = nil;
|
||||
self.gitTree = nil;
|
||||
|
||||
switch (self.selectedTab) {
|
||||
case 0: self.webCommit = realCommit; break;
|
||||
case 1: self.gitTree = realCommit.tree; break;
|
||||
|
||||
selectedCommit = [[commitController selectedObjects] lastObject];
|
||||
|
||||
if (self.selectedCommitDetailsIndex == kHistoryTreeViewIndex) {
|
||||
self.gitTree = selectedCommit.tree;
|
||||
[self restoreFileBrowserSelection];
|
||||
}
|
||||
}
|
||||
else // kHistoryDetailViewIndex
|
||||
self.webCommit = selectedCommit;
|
||||
|
||||
BOOL isOnHeadBranch = [selectedCommit isOnHeadBranch];
|
||||
[mergeButton setEnabled:!isOnHeadBranch];
|
||||
[cherryPickButton setEnabled:!isOnHeadBranch];
|
||||
[rebaseButton setEnabled:!isOnHeadBranch];
|
||||
}
|
||||
|
||||
- (void) setSelectedTab: (int) number
|
||||
- (void) updateBranchFilterMatrix
|
||||
{
|
||||
selectedTab = number;
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:selectedTab forKey:@"Repository Window Selected Tab Index"];
|
||||
if ([repository.currentBranch isSimpleRef]) {
|
||||
[allBranchesFilterItem setEnabled:YES];
|
||||
[localRemoteBranchesFilterItem setEnabled:YES];
|
||||
|
||||
NSInteger filter = repository.currentBranchFilter;
|
||||
[allBranchesFilterItem setState:(filter == kGitXAllBranchesFilter)];
|
||||
[localRemoteBranchesFilterItem setState:(filter == kGitXLocalRemoteBranchesFilter)];
|
||||
[selectedBranchFilterItem setState:(filter == kGitXSelectedBranchFilter)];
|
||||
}
|
||||
else {
|
||||
[allBranchesFilterItem setState:NO];
|
||||
[localRemoteBranchesFilterItem setState:NO];
|
||||
|
||||
[allBranchesFilterItem setEnabled:NO];
|
||||
[localRemoteBranchesFilterItem setEnabled:NO];
|
||||
|
||||
[selectedBranchFilterItem setState:YES];
|
||||
}
|
||||
|
||||
[selectedBranchFilterItem setTitle:[repository.currentBranch title]];
|
||||
[selectedBranchFilterItem sizeToFit];
|
||||
|
||||
[localRemoteBranchesFilterItem setTitle:[[repository.currentBranch ref] isRemote] ? @"Remote" : @"Local"];
|
||||
}
|
||||
|
||||
- (PBGitCommit *) firstCommit
|
||||
{
|
||||
NSArray *arrangedObjects = [commitController arrangedObjects];
|
||||
if ([arrangedObjects count] > 0)
|
||||
return [arrangedObjects objectAtIndex:0];
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void) setSelectedCommitDetailsIndex:(int)detailsIndex
|
||||
{
|
||||
if (selectedCommitDetailsIndex == detailsIndex)
|
||||
return;
|
||||
|
||||
selectedCommitDetailsIndex = detailsIndex;
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:selectedCommitDetailsIndex forKey:kHistorySelectedDetailIndexKey];
|
||||
forceSelectionUpdate = YES;
|
||||
[self updateKeys];
|
||||
}
|
||||
|
||||
- (void) updateStatus
|
||||
{
|
||||
self.isBusy = repository.revisionList.isUpdating;
|
||||
self.status = [NSString stringWithFormat:@"%d commits loaded", [[commitController arrangedObjects] count]];
|
||||
}
|
||||
|
||||
- (void) restoreFileBrowserSelection
|
||||
{
|
||||
if (self.selectedCommitDetailsIndex != kHistoryTreeViewIndex)
|
||||
return;
|
||||
|
||||
NSArray *children = [treeController content];
|
||||
if ([children count] == 0)
|
||||
return;
|
||||
|
||||
NSIndexPath *path = [[NSIndexPath alloc] init];
|
||||
if ([currentFileBrowserSelectionPath count] == 0)
|
||||
path = [path indexPathByAddingIndex:0];
|
||||
else {
|
||||
for (NSString *pathComponent in currentFileBrowserSelectionPath) {
|
||||
PBGitTree *child = nil;
|
||||
NSUInteger childIndex = 0;
|
||||
for (child in children) {
|
||||
if ([child.path isEqualToString:pathComponent]) {
|
||||
path = [path indexPathByAddingIndex:childIndex];
|
||||
children = child.children;
|
||||
break;
|
||||
}
|
||||
childIndex++;
|
||||
}
|
||||
if (!child)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[treeController setSelectionIndexPath:path];
|
||||
}
|
||||
|
||||
- (void) saveFileBrowserSelection
|
||||
{
|
||||
NSArray *objects = [treeController selectedObjects];
|
||||
NSArray *content = [treeController content];
|
||||
|
||||
if ([objects count] && [content count]) {
|
||||
PBGitTree *treeItem = [objects objectAtIndex:0];
|
||||
currentFileBrowserSelectionPath = [treeItem.fullPath componentsSeparatedByString:@"/"];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
{
|
||||
if ([(NSString *)context isEqualToString: @"commitChange"]) {
|
||||
[self updateKeys];
|
||||
[self restoreFileBrowserSelection];
|
||||
return;
|
||||
}
|
||||
else if ([(NSString *)context isEqualToString: @"treeChange"]) {
|
||||
|
||||
if ([(NSString *)context isEqualToString: @"treeChange"]) {
|
||||
[self updateQuicklookForce: NO];
|
||||
[self saveFileBrowserSelection];
|
||||
return;
|
||||
}
|
||||
else if([(NSString *)context isEqualToString:@"branchChange"]) {
|
||||
|
||||
if([(NSString *)context isEqualToString:@"branchChange"]) {
|
||||
// Reset the sorting
|
||||
commitController.sortDescriptors = [NSArray array];
|
||||
if ([[commitController sortDescriptors] count])
|
||||
[commitController setSortDescriptors:[NSArray array]];
|
||||
[self updateBranchFilterMatrix];
|
||||
return;
|
||||
}
|
||||
else {
|
||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
||||
|
||||
if([(NSString *)context isEqualToString:@"updateRefs"]) {
|
||||
[commitController rearrangeObjects];
|
||||
return;
|
||||
}
|
||||
|
||||
if([(NSString *)context isEqualToString:@"updateCommitCount"] || [(NSString *)context isEqualToString:@"revisionListUpdating"]) {
|
||||
[self updateStatus];
|
||||
return;
|
||||
}
|
||||
|
||||
if([(NSString *)context isEqualToString:@"revisionListUpdatedGraph"]) {
|
||||
if ([repository.currentBranch isSimpleRef])
|
||||
[self selectCommit:[repository shaForRef:[repository.currentBranch ref]]];
|
||||
else
|
||||
[self selectCommit:[[self firstCommit] realSha]];
|
||||
return;
|
||||
}
|
||||
|
||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
||||
}
|
||||
|
||||
- (IBAction) openSelectedFile: sender
|
||||
@@ -207,14 +354,24 @@
|
||||
[[NSWorkspace sharedWorkspace] openFile:name];
|
||||
}
|
||||
|
||||
- (IBAction) setDetailedView: sender {
|
||||
self.selectedTab = 0;
|
||||
- (IBAction) setDetailedView:(id)sender
|
||||
{
|
||||
self.selectedCommitDetailsIndex = kHistoryDetailViewIndex;
|
||||
forceSelectionUpdate = YES;
|
||||
}
|
||||
- (IBAction) setRawView: sender {
|
||||
self.selectedTab = 1;
|
||||
|
||||
- (IBAction) setTreeView:(id)sender
|
||||
{
|
||||
self.selectedCommitDetailsIndex = kHistoryTreeViewIndex;
|
||||
forceSelectionUpdate = YES;
|
||||
}
|
||||
- (IBAction) setTreeView: sender {
|
||||
self.selectedTab = 2;
|
||||
|
||||
- (IBAction) setBranchFilter:(id)sender
|
||||
{
|
||||
repository.currentBranchFilter = [sender tag];
|
||||
[PBGitDefaults setBranchFilter:repository.currentBranchFilter];
|
||||
[self updateBranchFilterMatrix];
|
||||
forceSelectionUpdate = YES;
|
||||
}
|
||||
|
||||
- (void)keyDown:(NSEvent*)event
|
||||
@@ -250,42 +407,66 @@
|
||||
|
||||
}
|
||||
|
||||
- (IBAction) toggleQuickView: sender
|
||||
- (IBAction) toggleQLPreviewPanel:(id)sender
|
||||
{
|
||||
[[NSApp delegate] togglePreviewPanel:sender];
|
||||
// !!! Andre Berg 20100324: commented this out since brotherbard implements
|
||||
// the QLPreviewPanel a bit more gracefully than me
|
||||
// [[NSApp delegate] togglePreviewPanel:sender];
|
||||
|
||||
if ([[QLPreviewPanel sharedPreviewPanel] respondsToSelector:@selector(setDataSource:)]) {
|
||||
// Public QL API
|
||||
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible])
|
||||
[[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
|
||||
else
|
||||
[[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
|
||||
}
|
||||
else {
|
||||
// Private QL API (10.5 only)
|
||||
if ([[QLPreviewPanel sharedPreviewPanel] isOpen])
|
||||
[[QLPreviewPanel sharedPreviewPanel] closePanel];
|
||||
else {
|
||||
[[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFrontWithEffect:1];
|
||||
[self updateQuicklookForce:YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void) updateQuicklookForce: (BOOL) force
|
||||
- (void) updateQuicklookForce:(BOOL)force
|
||||
{
|
||||
if ((!force && ![[QLPreviewPanel sharedPreviewPanel] isVisible])
|
||||
if ((!force && ![[QLPreviewPanel sharedPreviewPanel] isVisible] && ![[QLPreviewPanel sharedPreviewPanel] isOpen])
|
||||
|| ![QLPreviewPanel sharedPreviewPanelExists])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// NSArray* selectedFiles = [treeController selectedObjects];
|
||||
//
|
||||
// if ([selectedFiles count] == 0)
|
||||
// return;
|
||||
//
|
||||
// NSMutableArray* fileNames = [NSMutableArray array];
|
||||
// for (PBGitTree* tree in selectedFiles) {
|
||||
// NSString* s = [tree tmpFileNameForContents];
|
||||
// if (s)
|
||||
// [fileNames addObject:[NSURL fileURLWithPath: s]];
|
||||
// }
|
||||
[[QLPreviewPanel sharedPreviewPanel] reloadData];
|
||||
|
||||
if ([[QLPreviewPanel sharedPreviewPanel] respondsToSelector:@selector(setDataSource:)]) {
|
||||
// Public QL API
|
||||
[previewPanel reloadData];
|
||||
}
|
||||
else {
|
||||
// Private QL API (10.5 only)
|
||||
NSArray *selectedFiles = [treeController selectedObjects];
|
||||
|
||||
NSMutableArray *fileNames = [NSMutableArray array];
|
||||
for (PBGitTree *tree in selectedFiles) {
|
||||
NSString *filePath = [tree tmpFileNameForContents];
|
||||
if (filePath)
|
||||
[fileNames addObject:[NSURL fileURLWithPath:filePath]];
|
||||
}
|
||||
|
||||
if ([fileNames count])
|
||||
[[QLPreviewPanel sharedPreviewPanel] setURLs:fileNames currentIndex:0 preservingDisplayState:YES];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction) refresh: sender
|
||||
{
|
||||
[repository reloadRefs];
|
||||
[repository.revisionList reload];
|
||||
[repository forceUpdateRevisions];
|
||||
}
|
||||
|
||||
- (void) updateView
|
||||
{
|
||||
[self refresh:nil];
|
||||
[self updateKeys];
|
||||
}
|
||||
|
||||
- (NSResponder *)firstResponder;
|
||||
@@ -293,13 +474,46 @@
|
||||
return commitList;
|
||||
}
|
||||
|
||||
- (void) selectCommit: (NSString*) commit
|
||||
- (void) scrollSelectionToTopOfViewFrom:(NSInteger)oldIndex
|
||||
{
|
||||
NSPredicate* selection = [NSPredicate predicateWithFormat:@"realSha == %@", commit];
|
||||
NSArray* selectedCommits = [repository.revisionList.commits filteredArrayUsingPredicate:selection];
|
||||
[commitController setSelectedObjects: selectedCommits];
|
||||
int index = [[commitController selectionIndexes] firstIndex];
|
||||
[commitList scrollRowToVisible: index];
|
||||
if (oldIndex == NSIntegerMax)
|
||||
oldIndex = 0;
|
||||
|
||||
NSInteger newIndex = [[commitController selectionIndexes] firstIndex];
|
||||
|
||||
if (newIndex > oldIndex) {
|
||||
NSInteger visibleRows = floorf([[commitList superview] bounds].size.height / [commitList rowHeight]);
|
||||
newIndex += visibleRows - 1;
|
||||
if (newIndex >= [[commitController content] count])
|
||||
newIndex = [[commitController content] count] - 1;
|
||||
}
|
||||
|
||||
[commitList scrollRowToVisible:newIndex];
|
||||
}
|
||||
|
||||
- (NSArray *) selectedObjectsForSHA:(NSString *)commitSHA
|
||||
{
|
||||
NSPredicate *selection = [NSPredicate predicateWithFormat:@"realSha == %@", commitSHA];
|
||||
NSArray *selectedCommits = [[commitController content] filteredArrayUsingPredicate:selection];
|
||||
|
||||
if (([selectedCommits count] == 0) && [self firstCommit])
|
||||
selectedCommits = [NSArray arrayWithObject:[self firstCommit]];
|
||||
|
||||
return selectedCommits;
|
||||
}
|
||||
|
||||
- (void) selectCommit:(NSString *)commitSHA
|
||||
{
|
||||
if (!forceSelectionUpdate && [[selectedCommit realSha] isEqualToString:commitSHA])
|
||||
return;
|
||||
|
||||
NSInteger oldIndex = [[commitController selectionIndexes] firstIndex];
|
||||
|
||||
NSArray *selectedCommits = [self selectedObjectsForSHA:commitSHA];
|
||||
[commitController setSelectedObjects:selectedCommits];
|
||||
|
||||
if (repository.currentBranchFilter != kGitXSelectedBranchFilter)
|
||||
[self scrollSelectionToTopOfViewFrom:oldIndex];
|
||||
}
|
||||
|
||||
- (BOOL) hasNonlinearPath
|
||||
@@ -372,6 +586,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void) checkoutFiles:(id)sender
|
||||
{
|
||||
NSMutableArray *files = [NSMutableArray array];
|
||||
for (NSString *filePath in [sender representedObject])
|
||||
[files addObject:[filePath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
|
||||
|
||||
[repository checkoutFiles:files fromRefish:selectedCommit];
|
||||
}
|
||||
|
||||
- (void) diffFilesAction:(id)sender
|
||||
{
|
||||
[PBDiffWindowController showDiffWindowWithFiles:[sender representedObject] fromCommit:selectedCommit diffCommit:nil];
|
||||
}
|
||||
|
||||
- (NSMenu *)contextMenuForTreeView
|
||||
{
|
||||
@@ -385,21 +612,37 @@
|
||||
|
||||
- (NSArray *)menuItemsForPaths:(NSArray *)paths
|
||||
{
|
||||
BOOL multiple = [paths count] != 1;
|
||||
NSMutableArray *filePaths = [NSMutableArray array];
|
||||
for (NSString *filePath in paths)
|
||||
[filePaths addObject:[filePath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
|
||||
|
||||
BOOL multiple = [filePaths count] != 1;
|
||||
NSMenuItem *historyItem = [[NSMenuItem alloc] initWithTitle:multiple? @"Show history of files" : @"Show history of file"
|
||||
action:@selector(showCommitsFromTree:)
|
||||
keyEquivalent:@""];
|
||||
keyEquivalent:@""];
|
||||
|
||||
PBGitRef *headRef = [[repository headRef] ref];
|
||||
NSString *headRefName = [headRef shortName];
|
||||
NSString *diffTitle = [NSString stringWithFormat:@"Diff %@ with %@", multiple ? @"files" : @"file", headRefName];
|
||||
BOOL isHead = [[selectedCommit realSha] isEqualToString:[repository headSHA]];
|
||||
NSMenuItem *diffItem = [[NSMenuItem alloc] initWithTitle:diffTitle
|
||||
action:isHead ? nil : @selector(diffFilesAction:)
|
||||
keyEquivalent:@""];
|
||||
|
||||
NSMenuItem *checkoutItem = [[NSMenuItem alloc] initWithTitle:multiple ? @"Checkout files" : @"Checkout file"
|
||||
action:@selector(checkoutFiles:)
|
||||
keyEquivalent:@""];
|
||||
NSMenuItem *finderItem = [[NSMenuItem alloc] initWithTitle:@"Show in Finder"
|
||||
action:@selector(showInFinderAction:)
|
||||
keyEquivalent:@""];
|
||||
NSMenuItem *openFilesItem = [[NSMenuItem alloc] initWithTitle:multiple? @"Open Files" : @"Open File"
|
||||
action:@selector(openFilesAction:)
|
||||
keyEquivalent:@""];
|
||||
|
||||
NSArray *menuItems = [NSArray arrayWithObjects:historyItem, finderItem, openFilesItem, nil];
|
||||
|
||||
NSArray *menuItems = [NSArray arrayWithObjects:historyItem, diffItem, checkoutItem, finderItem, openFilesItem, nil];
|
||||
for (NSMenuItem *item in menuItems) {
|
||||
[item setTarget:self];
|
||||
[item setRepresentedObject:paths];
|
||||
[item setRepresentedObject:filePaths];
|
||||
}
|
||||
|
||||
return menuItems;
|
||||
@@ -429,5 +672,131 @@
|
||||
return [sender frame].size.height;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark Repository Methods
|
||||
|
||||
- (IBAction) createBranch:(id)sender
|
||||
{
|
||||
PBGitRef *currentRef = [repository.currentBranch ref];
|
||||
|
||||
if (!selectedCommit || [selectedCommit hasRef:currentRef])
|
||||
[PBCreateBranchSheet beginCreateBranchSheetAtRefish:currentRef inRepository:self.repository];
|
||||
else
|
||||
[PBCreateBranchSheet beginCreateBranchSheetAtRefish:selectedCommit inRepository:self.repository];
|
||||
}
|
||||
|
||||
- (IBAction) createTag:(id)sender
|
||||
{
|
||||
if (!selectedCommit)
|
||||
[PBCreateTagSheet beginCreateTagSheetAtRefish:[repository.currentBranch ref] inRepository:repository];
|
||||
else
|
||||
[PBCreateTagSheet beginCreateTagSheetAtRefish:selectedCommit inRepository:repository];
|
||||
}
|
||||
|
||||
- (IBAction) showAddRemoteSheet:(id)sender
|
||||
{
|
||||
[PBAddRemoteSheet beginAddRemoteSheetForRepository:self.repository];
|
||||
}
|
||||
|
||||
- (IBAction) merge:(id)sender
|
||||
{
|
||||
if (selectedCommit)
|
||||
[repository mergeWithRefish:selectedCommit];
|
||||
}
|
||||
|
||||
- (IBAction) cherryPick:(id)sender
|
||||
{
|
||||
if (selectedCommit)
|
||||
[repository cherryPickRefish:selectedCommit];
|
||||
}
|
||||
|
||||
- (IBAction) rebase:(id)sender
|
||||
{
|
||||
if (selectedCommit) {
|
||||
PBGitRef *headRef = [[repository headRef] ref];
|
||||
[repository rebaseBranch:headRef onRefish:selectedCommit];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Quick Look Public API support
|
||||
|
||||
@protocol QLPreviewItem;
|
||||
|
||||
#pragma mark (QLPreviewPanelController)
|
||||
|
||||
- (BOOL) acceptsPreviewPanelControl:(id)panel
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)beginPreviewPanelControl:(id)panel
|
||||
{
|
||||
// This document is now responsible of the preview panel
|
||||
// It is allowed to set the delegate, data source and refresh panel.
|
||||
previewPanel = panel;
|
||||
[previewPanel setDelegate:self];
|
||||
[previewPanel setDataSource:self];
|
||||
}
|
||||
|
||||
- (void)endPreviewPanelControl:(id)panel
|
||||
{
|
||||
// This document loses its responsisibility on the preview panel
|
||||
// Until the next call to -beginPreviewPanelControl: it must not
|
||||
// change the panel's delegate, data source or refresh it.
|
||||
previewPanel = nil;
|
||||
}
|
||||
|
||||
#pragma mark <QLPreviewPanelDataSource>
|
||||
|
||||
- (NSInteger)numberOfPreviewItemsInPreviewPanel:(id)panel
|
||||
{
|
||||
return [[fileBrowser selectedRowIndexes] count];
|
||||
}
|
||||
|
||||
- (id <QLPreviewItem>)previewPanel:(id)panel previewItemAtIndex:(NSInteger)index
|
||||
{
|
||||
PBGitTree *treeItem = (PBGitTree *)[[treeController selectedObjects] objectAtIndex:index];
|
||||
NSURL *previewURL = [NSURL fileURLWithPath:[treeItem tmpFileNameForContents]];
|
||||
|
||||
return (<QLPreviewItem>)previewURL;
|
||||
}
|
||||
|
||||
#pragma mark <QLPreviewPanelDelegate>
|
||||
|
||||
- (BOOL)previewPanel:(id)panel handleEvent:(NSEvent *)event
|
||||
{
|
||||
// redirect all key down events to the table view
|
||||
if ([event type] == NSKeyDown) {
|
||||
[fileBrowser keyDown:event];
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
// This delegate method provides the rect on screen from which the panel will zoom.
|
||||
- (NSRect)previewPanel:(id)panel sourceFrameOnScreenForPreviewItem:(id <QLPreviewItem>)item
|
||||
{
|
||||
NSInteger index = [fileBrowser rowForItem:[[treeController selectedNodes] objectAtIndex:0]];
|
||||
if (index == NSNotFound) {
|
||||
return NSZeroRect;
|
||||
}
|
||||
|
||||
NSRect iconRect = [fileBrowser frameOfCellAtColumn:0 row:index];
|
||||
|
||||
// check that the icon rect is visible on screen
|
||||
NSRect visibleRect = [fileBrowser visibleRect];
|
||||
|
||||
if (!NSIntersectsRect(visibleRect, iconRect)) {
|
||||
return NSZeroRect;
|
||||
}
|
||||
|
||||
// convert icon rect to screen coordinates
|
||||
iconRect = [fileBrowser convertRectToBase:iconRect];
|
||||
iconRect.origin = [[fileBrowser window] convertBaseToScreen:iconRect.origin];
|
||||
|
||||
return iconRect;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// PBGitHistoryGrapher.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/20/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@class PBGitGrapher;
|
||||
|
||||
|
||||
@interface PBGitHistoryGrapher : NSObject {
|
||||
id delegate;
|
||||
|
||||
NSMutableSet *searchSHAs;
|
||||
PBGitGrapher *grapher;
|
||||
BOOL viewAllBranches;
|
||||
}
|
||||
|
||||
- (id) initWithBaseCommits:(NSSet *)commits viewAllBranches:(BOOL)viewAll delegate:(id)theDelegate;
|
||||
- (void) graphCommits:(NSArray *)revList;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,56 @@
|
||||
//
|
||||
// PBGitHistoryGrapher.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/20/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitHistoryGrapher.h"
|
||||
#import "PBGitGrapher.h"
|
||||
|
||||
|
||||
@implementation PBGitHistoryGrapher
|
||||
|
||||
|
||||
- (id) initWithBaseCommits:(NSSet *)commits viewAllBranches:(BOOL)viewAll delegate:(id)theDelegate
|
||||
{
|
||||
delegate = theDelegate;
|
||||
searchSHAs = [NSMutableSet setWithSet:commits];
|
||||
grapher = [[PBGitGrapher alloc] initWithRepository:nil];
|
||||
viewAllBranches = viewAll;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void) graphCommits:(NSArray *)revList
|
||||
{
|
||||
if (!revList || [revList count] == 0)
|
||||
return;
|
||||
|
||||
NSMutableArray *commits = [NSMutableArray array];
|
||||
NSInteger counter = 0;
|
||||
|
||||
for (PBGitCommit *commit in revList) {
|
||||
NSString *commitSHA = [commit realSha];
|
||||
if (viewAllBranches || [searchSHAs containsObject:commitSHA]) {
|
||||
[grapher decorateCommit:commit];
|
||||
[commits addObject:commit];
|
||||
if (!viewAllBranches) {
|
||||
[searchSHAs removeObject:commitSHA];
|
||||
[searchSHAs addObjectsFromArray:commit.parents];
|
||||
}
|
||||
}
|
||||
if (++counter % 2000 == 0) {
|
||||
[delegate performSelectorOnMainThread:@selector(addCommitsFromArray:) withObject:[commits copy] waitUntilDone:NO];
|
||||
commits = [NSMutableArray array];
|
||||
}
|
||||
}
|
||||
|
||||
[delegate performSelectorOnMainThread:@selector(addCommitsFromArray:) withObject:commits waitUntilDone:YES];
|
||||
[delegate performSelectorOnMainThread:@selector(finishedGraphing) withObject:nil waitUntilDone:NO];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,53 @@
|
||||
//
|
||||
// PBGitHistoryList.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/20/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
@class PBGitRepository;
|
||||
@class PBGitRevSpecifier;
|
||||
@class PBGitRef;
|
||||
@class PBGitRevList;
|
||||
@class PBGitHistoryGrapher;
|
||||
|
||||
@interface PBGitHistoryList : NSObject {
|
||||
PBGitRepository *repository;
|
||||
|
||||
PBGitRevList *projectRevList;
|
||||
PBGitRevList *currentRevList;
|
||||
|
||||
NSString *lastSHA;
|
||||
NSSet *lastRefSHAs;
|
||||
NSInteger lastBranchFilter;
|
||||
PBGitRef *lastRemoteRef;
|
||||
BOOL resetCommits;
|
||||
BOOL shouldReloadProjectHistory;
|
||||
NSDate *updatedGraph;
|
||||
|
||||
PBGitHistoryGrapher *grapher;
|
||||
NSOperationQueue *graphQueue;
|
||||
NSInvocationOperation *lastOperation;
|
||||
|
||||
NSMutableArray *commits;
|
||||
BOOL isUpdating;
|
||||
}
|
||||
|
||||
- (id) initWithRepository:(PBGitRepository *)repo;
|
||||
- (void) forceUpdate;
|
||||
- (void) updateHistory;
|
||||
|
||||
- (void) addCommitsFromArray:(NSArray *)array;
|
||||
|
||||
|
||||
@property (retain) PBGitRevList *projectRevList;
|
||||
@property (retain) NSMutableArray *commits;
|
||||
@property (readonly) NSArray *projectCommits;
|
||||
@property (assign) BOOL isUpdating;
|
||||
@property (retain) NSDate *updatedGraph;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,379 @@
|
||||
//
|
||||
// PBGitHistoryList.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 2/20/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitHistoryList.h"
|
||||
#import "PBGitRepository.h"
|
||||
#import "PBGitRevList.h"
|
||||
#import "PBGitGrapher.h"
|
||||
#import "PBGitHistoryGrapher.h"
|
||||
|
||||
|
||||
|
||||
@interface PBGitHistoryList ()
|
||||
|
||||
- (void) resetGraphing;
|
||||
|
||||
- (PBGitHistoryGrapher *) grapher;
|
||||
- (NSInvocationOperation *) operationForCommits:(NSArray *)newCommits;
|
||||
|
||||
- (void) updateProjectHistoryForRev:(PBGitRevSpecifier *)rev;
|
||||
- (void) updateHistoryForRev:(PBGitRevSpecifier *)rev;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
@implementation PBGitHistoryList
|
||||
|
||||
|
||||
@synthesize projectRevList;
|
||||
@synthesize commits;
|
||||
@synthesize isUpdating;
|
||||
@synthesize updatedGraph;
|
||||
@dynamic projectCommits;
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Public
|
||||
|
||||
- (id) initWithRepository:(PBGitRepository *)repo
|
||||
{
|
||||
commits = [NSMutableArray array];
|
||||
repository = repo;
|
||||
lastBranchFilter = -1;
|
||||
[repository addObserver:self forKeyPath:@"currentBranch" options:0 context:@"currentBranch"];
|
||||
[repository addObserver:self forKeyPath:@"currentBranchFilter" options:0 context:@"currentBranch"];
|
||||
[repository addObserver:self forKeyPath:@"hasChanged" options:0 context:@"repositoryHasChanged"];
|
||||
|
||||
shouldReloadProjectHistory = YES;
|
||||
projectRevList = [[PBGitRevList alloc] initWithRepository:repository rev:[PBGitRevSpecifier allBranchesRevSpec] shouldGraph:NO];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void) forceUpdate
|
||||
{
|
||||
if ([repository.currentBranch isSimpleRef])
|
||||
shouldReloadProjectHistory = YES;
|
||||
|
||||
[self updateHistory];
|
||||
}
|
||||
|
||||
|
||||
- (void) updateHistory
|
||||
{
|
||||
PBGitRevSpecifier *rev = repository.currentBranch;
|
||||
if (!rev)
|
||||
return;
|
||||
|
||||
if ([rev isSimpleRef])
|
||||
[self updateProjectHistoryForRev:rev];
|
||||
else
|
||||
[self updateHistoryForRev:rev];
|
||||
}
|
||||
|
||||
|
||||
- (NSArray *) projectCommits
|
||||
{
|
||||
return [projectRevList.commits copy];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark History Grapher delegate methods
|
||||
|
||||
- (void) addCommitsFromArray:(NSArray *)array
|
||||
{
|
||||
if (!array || [array count] == 0)
|
||||
return;
|
||||
if (resetCommits) {
|
||||
self.commits = [NSMutableArray array];
|
||||
resetCommits = NO;
|
||||
}
|
||||
|
||||
NSRange range = NSMakeRange([commits count], [array count]);
|
||||
NSIndexSet *indexes = [NSIndexSet indexSetWithIndexesInRange:range];
|
||||
|
||||
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@"commits"];
|
||||
[commits addObjectsFromArray:array];
|
||||
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@"commits"];
|
||||
}
|
||||
|
||||
|
||||
- (void) finishedGraphing
|
||||
{
|
||||
if (!currentRevList.isParsing && ([[graphQueue operations] count] == 0)) {
|
||||
self.isUpdating = NO;
|
||||
[self performSelector:@selector(setUpdatedGraph:) withObject:[NSDate date] afterDelay:0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Private
|
||||
|
||||
- (void) resetGraphing
|
||||
{
|
||||
resetCommits = YES;
|
||||
self.isUpdating = YES;
|
||||
|
||||
[graphQueue setSuspended:YES];
|
||||
if (graphQueue)
|
||||
[graphQueue removeObserver:self forKeyPath:@"operations"];
|
||||
graphQueue = [[NSOperationQueue alloc] init];
|
||||
[graphQueue addObserver:self forKeyPath:@"operations" options:0 context:@"operations"];
|
||||
lastOperation = nil;
|
||||
|
||||
grapher = [self grapher];
|
||||
}
|
||||
|
||||
|
||||
- (NSInvocationOperation *) operationForCommits:(NSArray *)newCommits
|
||||
{
|
||||
NSInvocationOperation *graphOperation = [[NSInvocationOperation alloc] initWithTarget:grapher selector:@selector(graphCommits:) object:newCommits];
|
||||
if (lastOperation)
|
||||
[graphOperation addDependency:lastOperation];
|
||||
lastOperation = graphOperation;
|
||||
|
||||
return graphOperation;
|
||||
}
|
||||
|
||||
|
||||
- (NSSet *) baseCommitsForLocalRefs
|
||||
{
|
||||
NSMutableSet *baseCommitSHAs = [NSMutableSet set];
|
||||
NSDictionary *refs = repository.refs;
|
||||
|
||||
for (NSString *sha in refs)
|
||||
for (PBGitRef *ref in [refs objectForKey:sha])
|
||||
if ([ref isBranch] || [ref isTag])
|
||||
[baseCommitSHAs addObject:sha];
|
||||
|
||||
return baseCommitSHAs;
|
||||
}
|
||||
|
||||
|
||||
- (NSSet *) baseCommitsForRemoteRefs
|
||||
{
|
||||
NSMutableSet *baseCommitSHAs = [NSMutableSet set];
|
||||
NSDictionary *refs = repository.refs;
|
||||
|
||||
PBGitRef *remoteRef = [[repository.currentBranch ref] remoteRef];
|
||||
|
||||
for (NSString *sha in refs)
|
||||
for (PBGitRef *ref in [refs objectForKey:sha])
|
||||
if ([remoteRef isEqualToRef:[ref remoteRef]])
|
||||
[baseCommitSHAs addObject:sha];
|
||||
|
||||
return baseCommitSHAs;
|
||||
}
|
||||
|
||||
|
||||
- (NSSet *) baseCommits
|
||||
{
|
||||
if ((repository.currentBranchFilter == kGitXSelectedBranchFilter) || (repository.currentBranchFilter == kGitXAllBranchesFilter)) {
|
||||
if (lastSHA)
|
||||
return [NSMutableSet setWithObject:lastSHA];
|
||||
else if ([repository.currentBranch isSimpleRef]) {
|
||||
PBGitRef *currentRef = [repository.currentBranch ref];
|
||||
NSString *sha = [repository shaForRef:currentRef];
|
||||
if (sha)
|
||||
return [NSMutableSet setWithObject:sha];
|
||||
}
|
||||
}
|
||||
else if (repository.currentBranchFilter == kGitXLocalRemoteBranchesFilter) {
|
||||
if ([[repository.currentBranch ref] isRemote])
|
||||
return [self baseCommitsForRemoteRefs];
|
||||
else
|
||||
return [self baseCommitsForLocalRefs];
|
||||
}
|
||||
|
||||
return [NSMutableSet set];
|
||||
}
|
||||
|
||||
|
||||
- (PBGitHistoryGrapher *) grapher
|
||||
{
|
||||
BOOL viewAllBranches = (repository.currentBranchFilter == kGitXAllBranchesFilter);
|
||||
|
||||
return [[PBGitHistoryGrapher alloc] initWithBaseCommits:[self baseCommits] viewAllBranches:viewAllBranches delegate:self];
|
||||
}
|
||||
|
||||
|
||||
- (void) setCurrentRevList:(PBGitRevList *)parser
|
||||
{
|
||||
if (currentRevList == parser)
|
||||
return;
|
||||
|
||||
if (currentRevList) {
|
||||
[currentRevList removeObserver:self forKeyPath:@"commits"];
|
||||
[currentRevList removeObserver:self forKeyPath:@"isParsing"];
|
||||
}
|
||||
|
||||
currentRevList = parser;
|
||||
|
||||
[currentRevList addObserver:self forKeyPath:@"commits" options:NSKeyValueObservingOptionNew context:@"commitsUpdated"];
|
||||
[currentRevList addObserver:self forKeyPath:@"isParsing" options:0 context:@"revListParsing"];
|
||||
}
|
||||
|
||||
|
||||
- (BOOL) isAllBranchesOnlyUpdate
|
||||
{
|
||||
return (lastBranchFilter == kGitXAllBranchesFilter) && (repository.currentBranchFilter == kGitXAllBranchesFilter);
|
||||
}
|
||||
|
||||
|
||||
- (BOOL) isLocalRemoteOnlyUpdate:(PBGitRevSpecifier *)rev
|
||||
{
|
||||
if ((lastBranchFilter == kGitXLocalRemoteBranchesFilter) && (repository.currentBranchFilter == kGitXLocalRemoteBranchesFilter)) {
|
||||
if (!lastRemoteRef && ![[rev ref] isRemote])
|
||||
return YES;
|
||||
|
||||
if ([lastRemoteRef isEqualToRef:[[rev ref] remoteRef]])
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL) selectedBranchNeedsNewGraph:(PBGitRevSpecifier *)rev
|
||||
{
|
||||
if (![rev isSimpleRef])
|
||||
return YES;
|
||||
|
||||
if ([self isAllBranchesOnlyUpdate] || [self isLocalRemoteOnlyUpdate:rev]) {
|
||||
lastRemoteRef = [[rev ref] remoteRef];
|
||||
lastSHA = nil;
|
||||
self.isUpdating = NO;
|
||||
self.updatedGraph = [NSDate date];
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSString *revSHA = [repository shaForRef:[rev ref]];
|
||||
if ([revSHA isEqualToString:lastSHA] && (lastBranchFilter == repository.currentBranchFilter))
|
||||
return NO;
|
||||
|
||||
lastBranchFilter = repository.currentBranchFilter;
|
||||
lastRemoteRef = [[rev ref] remoteRef];
|
||||
lastSHA = revSHA;
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL) haveRefsBeenModified
|
||||
{
|
||||
[repository reloadRefs];
|
||||
|
||||
NSMutableSet *currentRefSHAs = [NSMutableSet setWithArray:[repository.refs allKeys]];
|
||||
[currentRefSHAs minusSet:lastRefSHAs];
|
||||
lastRefSHAs = [NSSet setWithArray:[repository.refs allKeys]];
|
||||
|
||||
return [currentRefSHAs count] != 0;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark updating history
|
||||
|
||||
- (void) updateProjectHistoryForRev:(PBGitRevSpecifier *)rev
|
||||
{
|
||||
[self setCurrentRevList:projectRevList];
|
||||
|
||||
if ([self haveRefsBeenModified])
|
||||
shouldReloadProjectHistory = YES;
|
||||
|
||||
if (![self selectedBranchNeedsNewGraph:rev] && !shouldReloadProjectHistory)
|
||||
return;
|
||||
|
||||
[self resetGraphing];
|
||||
|
||||
if (shouldReloadProjectHistory) {
|
||||
shouldReloadProjectHistory = NO;
|
||||
lastBranchFilter = -1;
|
||||
lastRemoteRef = nil;
|
||||
lastSHA = nil;
|
||||
[projectRevList loadRevisons];
|
||||
return;
|
||||
}
|
||||
|
||||
[graphQueue addOperation:[self operationForCommits:projectRevList.commits]];
|
||||
}
|
||||
|
||||
|
||||
- (void) updateHistoryForRev:(PBGitRevSpecifier *)rev
|
||||
{
|
||||
PBGitRevList *otherRevListParser = [[PBGitRevList alloc] initWithRepository:repository rev:rev shouldGraph:YES];
|
||||
|
||||
[self setCurrentRevList:otherRevListParser];
|
||||
[self resetGraphing];
|
||||
lastBranchFilter = -1;
|
||||
lastRemoteRef = nil;
|
||||
lastSHA = nil;
|
||||
|
||||
[otherRevListParser loadRevisons];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Key Value Observing
|
||||
|
||||
- (void) removeObservers
|
||||
{
|
||||
[repository removeObserver:self forKeyPath:@"currentBranch"];
|
||||
[repository removeObserver:self forKeyPath:@"hasChanged"];
|
||||
|
||||
if (currentRevList) {
|
||||
[currentRevList removeObserver:self forKeyPath:@"commits"];
|
||||
[currentRevList removeObserver:self forKeyPath:@"isParsing"];
|
||||
}
|
||||
|
||||
if (graphQueue)
|
||||
[graphQueue removeObserver:self forKeyPath:@"operations"];
|
||||
}
|
||||
|
||||
|
||||
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
{
|
||||
if ([@"currentBranch" isEqualToString:context]) {
|
||||
[self updateHistory];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([@"repositoryHasChanged" isEqualToString:context]) {
|
||||
[self forceUpdate];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([@"commitsUpdated" isEqualToString:context]) {
|
||||
NSInteger changeKind = [(NSNumber *)[change objectForKey:NSKeyValueChangeKindKey] intValue];
|
||||
if (changeKind == NSKeyValueChangeInsertion) {
|
||||
NSArray *newCommits = [change objectForKey:NSKeyValueChangeNewKey];
|
||||
if ([repository.currentBranch isSimpleRef])
|
||||
[graphQueue addOperation:[self operationForCommits:newCommits]];
|
||||
else
|
||||
[self addCommitsFromArray:newCommits];
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ([@"revListParsing" isEqualToString:context] || [@"operations" isEqualToString:context]) {
|
||||
[self finishedGraphing];
|
||||
return;
|
||||
}
|
||||
|
||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -202,7 +202,7 @@ NSString *PBGitIndexOperationFailed = @"PBGitIndexOperationFailed";
|
||||
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithBool:success] forKey:@"success"];
|
||||
NSString *description;
|
||||
if (success)
|
||||
description = [NSString stringWithFormat:@"Successfull created commit %@", commit];
|
||||
description = [NSString stringWithFormat:@"Successfully created commit %@", commit];
|
||||
else
|
||||
description = [NSString stringWithFormat:@"Post-commit hook failed, but successfully created commit %@", commit];
|
||||
|
||||
|
||||
@@ -196,19 +196,30 @@
|
||||
[ws selectFile: path inFileViewerRootedAtPath:nil];
|
||||
}
|
||||
|
||||
- (void)discardChangesForFiles:(NSArray *)files force:(BOOL)force
|
||||
- (void) discardChangesForFilesAlertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
|
||||
{
|
||||
[[alert window] orderOut:nil];
|
||||
|
||||
if (returnCode == NSAlertDefaultReturn) {
|
||||
[commitController.index discardChangesForFiles:contextInfo];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) discardChangesForFiles:(NSArray *)files force:(BOOL)force
|
||||
{
|
||||
if (!force) {
|
||||
int ret = [[NSAlert alertWithMessageText:@"Discard changes"
|
||||
defaultButton:nil
|
||||
alternateButton:@"Cancel"
|
||||
otherButton:nil
|
||||
informativeTextWithFormat:@"Are you sure you wish to discard the changes to this file?\n\nYou cannot undo this operation."] runModal];
|
||||
if (ret != NSAlertDefaultReturn)
|
||||
return;
|
||||
}
|
||||
|
||||
[commitController.index discardChangesForFiles:files];
|
||||
NSAlert *alert = [NSAlert alertWithMessageText:@"Discard changes"
|
||||
defaultButton:nil
|
||||
alternateButton:@"Cancel"
|
||||
otherButton:nil
|
||||
informativeTextWithFormat:@"Are you sure you wish to discard the changes to this file?\n\nYou cannot undo this operation."];
|
||||
[alert beginSheetModalForWindow:[[commitController view] window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(discardChangesForFilesAlertDidEnd:returnCode:contextInfo:)
|
||||
contextInfo:files];
|
||||
} else {
|
||||
[commitController.index discardChangesForFiles:files];
|
||||
}
|
||||
}
|
||||
|
||||
# pragma mark TableView icon delegate
|
||||
|
||||
@@ -7,14 +7,43 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBGitRefish.h"
|
||||
|
||||
|
||||
@interface PBGitRef : NSObject {
|
||||
extern NSString * const kGitXTagType;
|
||||
extern NSString * const kGitXBranchType;
|
||||
extern NSString * const kGitXRemoteType;
|
||||
extern NSString * const kGitXRemoteBranchType;
|
||||
|
||||
extern NSString * const kGitXTagRefPrefix;
|
||||
extern NSString * const kGitXBranchRefPrefix;
|
||||
extern NSString * const kGitXRemoteRefPrefix;
|
||||
|
||||
|
||||
@interface PBGitRef : NSObject <PBGitRefish> {
|
||||
NSString* ref;
|
||||
}
|
||||
|
||||
- (NSString*) shortName;
|
||||
- (NSString*) type;
|
||||
// <PBGitRefish>
|
||||
- (NSString *) refishName;
|
||||
- (NSString *) shortName;
|
||||
- (NSString *) refishType;
|
||||
|
||||
- (NSString *) tagName;
|
||||
- (NSString *) branchName;
|
||||
- (NSString *) remoteName;
|
||||
- (NSString *) remoteBranchName;
|
||||
|
||||
- (NSString *) type;
|
||||
- (BOOL) isBranch;
|
||||
- (BOOL) isTag;
|
||||
- (BOOL) isRemote;
|
||||
- (BOOL) isRemoteBranch;
|
||||
|
||||
- (PBGitRef *) remoteRef;
|
||||
|
||||
- (BOOL) isEqualToRef:(PBGitRef *)otherRef;
|
||||
|
||||
+ (PBGitRef*) refFromString: (NSString*) s;
|
||||
- (PBGitRef*) initWithString: (NSString*) s;
|
||||
@property(readonly) NSString* ref;
|
||||
|
||||
@@ -9,27 +9,99 @@
|
||||
#import "PBGitRef.h"
|
||||
|
||||
|
||||
NSString * const kGitXTagType = @"tag";
|
||||
NSString * const kGitXBranchType = @"branch";
|
||||
NSString * const kGitXRemoteType = @"remote";
|
||||
NSString * const kGitXRemoteBranchType = @"remote branch";
|
||||
|
||||
NSString * const kGitXTagRefPrefix = @"refs/tags/";
|
||||
NSString * const kGitXBranchRefPrefix = @"refs/heads/";
|
||||
NSString * const kGitXRemoteRefPrefix = @"refs/remotes/";
|
||||
|
||||
|
||||
@implementation PBGitRef
|
||||
|
||||
@synthesize ref;
|
||||
- (NSString*) shortName
|
||||
|
||||
- (NSString *) tagName
|
||||
{
|
||||
if ([self type])
|
||||
return [ref substringFromIndex:[[self type] length] + 7];
|
||||
return ref;
|
||||
if (![self isTag])
|
||||
return nil;
|
||||
|
||||
return [self shortName];
|
||||
}
|
||||
|
||||
- (NSString*) type
|
||||
- (NSString *) branchName
|
||||
{
|
||||
if ([ref hasPrefix:@"refs/heads"])
|
||||
if (![self isBranch])
|
||||
return nil;
|
||||
|
||||
return [self shortName];
|
||||
}
|
||||
|
||||
- (NSString *) remoteName
|
||||
{
|
||||
if (![self isRemote])
|
||||
return nil;
|
||||
|
||||
return (NSString *)[[ref componentsSeparatedByString:@"/"] objectAtIndex:2];
|
||||
}
|
||||
|
||||
- (NSString *) remoteBranchName
|
||||
{
|
||||
if (![self isRemoteBranch])
|
||||
return nil;
|
||||
|
||||
return [[self shortName] substringFromIndex:[[self remoteName] length] + 1];;
|
||||
}
|
||||
|
||||
- (NSString *) type
|
||||
{
|
||||
if ([self isBranch])
|
||||
return @"head";
|
||||
if ([ref hasPrefix:@"refs/tags"])
|
||||
if ([self isTag])
|
||||
return @"tag";
|
||||
if ([ref hasPrefix:@"refs/remotes"])
|
||||
if ([self isRemote])
|
||||
return @"remote";
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (BOOL) isBranch
|
||||
{
|
||||
return [ref hasPrefix:kGitXBranchRefPrefix];
|
||||
}
|
||||
|
||||
- (BOOL) isTag
|
||||
{
|
||||
return [ref hasPrefix:kGitXTagRefPrefix];
|
||||
}
|
||||
|
||||
- (BOOL) isRemote
|
||||
{
|
||||
return [ref hasPrefix:kGitXRemoteRefPrefix];
|
||||
}
|
||||
|
||||
- (BOOL) isRemoteBranch
|
||||
{
|
||||
if (![self isRemote])
|
||||
return NO;
|
||||
|
||||
return ([[ref componentsSeparatedByString:@"/"] count] > 3);
|
||||
}
|
||||
|
||||
- (BOOL) isEqualToRef:(PBGitRef *)otherRef
|
||||
{
|
||||
return [ref isEqualToString:[otherRef ref]];
|
||||
}
|
||||
|
||||
- (PBGitRef *) remoteRef
|
||||
{
|
||||
if (![self isRemote])
|
||||
return nil;
|
||||
|
||||
return [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:[self remoteName]]];
|
||||
}
|
||||
|
||||
+ (PBGitRef*) refFromString: (NSString*) s
|
||||
{
|
||||
return [[PBGitRef alloc] initWithString:s];
|
||||
@@ -50,4 +122,32 @@
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark <PBGitRefish>
|
||||
|
||||
- (NSString *) refishName
|
||||
{
|
||||
return ref;
|
||||
}
|
||||
|
||||
- (NSString *) shortName
|
||||
{
|
||||
if ([self type])
|
||||
return [ref substringFromIndex:[[self type] length] + 7];
|
||||
return ref;
|
||||
}
|
||||
|
||||
- (NSString *) refishType
|
||||
{
|
||||
if ([self isBranch])
|
||||
return kGitXBranchType;
|
||||
if ([self isTag])
|
||||
return kGitXTagType;
|
||||
if ([self isRemoteBranch])
|
||||
return kGitXRemoteBranchType;
|
||||
if ([self isRemote])
|
||||
return kGitXRemoteType;
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// PBGitRefish.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 12/25/09.
|
||||
// Copyright 2009 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
// Several git commands can take a ref "refs/heads/master" or an SHA.
|
||||
// Use <PBGitRefish> to accept a PBGitRef or a PBGitCommit without having to write
|
||||
// two separate methods.
|
||||
//
|
||||
// refishName the full name of the ref "refs/heads/master" or the full SHA
|
||||
// used in git commands
|
||||
// shortName a more user friendly version of the refName, "master" or a short SHA
|
||||
// refishType a short name for the type
|
||||
|
||||
@protocol PBGitRefish <NSObject>
|
||||
|
||||
- (NSString *) refishName;
|
||||
- (NSString *) shortName;
|
||||
- (NSString *) refishType;
|
||||
|
||||
@end
|
||||
@@ -7,25 +7,50 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBGitRevList.h"
|
||||
#import "PBGitHistoryList.h"
|
||||
#import "PBGitRevSpecifier.h"
|
||||
#import "PBGitConfig.h"
|
||||
#import "PBGitXErrors.h"
|
||||
#import "PBGitRefish.h"
|
||||
|
||||
extern NSString* PBGitRepositoryErrorDomain;
|
||||
enum branchFilterTypes {
|
||||
kGitXAllBranchesFilter = 0,
|
||||
kGitXLocalRemoteBranchesFilter,
|
||||
kGitXSelectedBranchFilter
|
||||
};
|
||||
|
||||
@class PBGitWindowController;
|
||||
@class PBGitCommit;
|
||||
|
||||
@interface PBGitRepository : NSDocument {
|
||||
PBGitRevList* revisionList;
|
||||
PBGitHistoryList* revisionList;
|
||||
PBGitConfig *config;
|
||||
|
||||
BOOL hasChanged;
|
||||
NSMutableArray *branches;
|
||||
PBGitRevSpecifier *currentBranch;
|
||||
NSInteger currentBranchFilter;
|
||||
NSMutableDictionary *refs;
|
||||
|
||||
PBGitRevSpecifier *_headRef; // Caching
|
||||
}
|
||||
|
||||
- (void) cloneRepositoryToPath:(NSString *)path bare:(BOOL)isBare;
|
||||
- (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;
|
||||
- (BOOL) checkoutRefish:(id <PBGitRefish>)ref;
|
||||
- (BOOL) checkoutFiles:(NSArray *)files fromRefish:(id <PBGitRefish>)ref;
|
||||
- (BOOL) mergeWithRefish:(id <PBGitRefish>)ref;
|
||||
- (BOOL) cherryPickRefish:(id <PBGitRefish>)ref;
|
||||
- (BOOL) rebaseBranch:(id <PBGitRefish>)branch onRefish:(id <PBGitRefish>)upstream;
|
||||
- (BOOL) createBranch:(NSString *)branchName atRefish:(id <PBGitRefish>)ref;
|
||||
- (BOOL) createTag:(NSString *)tagName message:(NSString *)message atRefish:(id <PBGitRefish>)commitSHA;
|
||||
- (BOOL) deleteRemote:(PBGitRef *)ref;
|
||||
- (BOOL) deleteRef:(PBGitRef *)ref;
|
||||
|
||||
- (NSFileHandle*) handleForCommand:(NSString*) cmd;
|
||||
- (NSFileHandle*) handleForArguments:(NSArray*) args;
|
||||
- (NSFileHandle *) handleInWorkDirForArguments:(NSArray *)args;
|
||||
@@ -43,13 +68,29 @@
|
||||
- (BOOL)executeHook:(NSString *)name withArgs:(NSArray*) arguments output:(NSString **)output;
|
||||
|
||||
- (NSString *)workingDirectory;
|
||||
- (NSString *) projectName;
|
||||
- (NSString *)gitIgnoreFilename;
|
||||
- (BOOL)isBareRepository;
|
||||
|
||||
- (BOOL) reloadRefs;
|
||||
- (void) reloadRefs;
|
||||
- (void) addRef:(PBGitRef *)ref fromParameters:(NSArray *)params;
|
||||
- (void) lazyReload;
|
||||
- (PBGitRevSpecifier*) headRef;
|
||||
- (NSString *) headSHA;
|
||||
- (PBGitCommit *) headCommit;
|
||||
- (NSString *) shaForRef:(PBGitRef *)ref;
|
||||
- (PBGitCommit *) commitForRef:(PBGitRef *)ref;
|
||||
- (PBGitCommit *) commitForSHA:(NSString *)sha;
|
||||
- (BOOL) isOnSameBranch:(NSString *)baseSHA asSHA:(NSString *)testSHA;
|
||||
- (BOOL) isSHAOnHeadBranch:(NSString *)testSHA;
|
||||
- (BOOL) isRefOnHeadBranch:(PBGitRef *)testRef;
|
||||
- (BOOL) checkRefFormat:(NSString *)refName;
|
||||
- (BOOL) refExists:(PBGitRef *)ref;
|
||||
|
||||
- (NSArray *) remotes;
|
||||
- (BOOL) hasRemotes;
|
||||
- (PBGitRef *) remoteRefForBranch:(PBGitRef *)branch error:(NSError **)error;
|
||||
- (NSString *) infoForRemote:(NSString *)remoteName;
|
||||
|
||||
- (void) readCurrentBranch;
|
||||
- (PBGitRevSpecifier*) addBranch: (PBGitRevSpecifier*) rev;
|
||||
@@ -64,13 +105,15 @@
|
||||
|
||||
- (id) initWithURL: (NSURL*) path;
|
||||
- (void) setup;
|
||||
- (void) forceUpdateRevisions;
|
||||
|
||||
@property (assign) BOOL hasChanged;
|
||||
@property (readonly) PBGitWindowController *windowController;
|
||||
@property (readonly) PBGitConfig *config;
|
||||
@property (retain) PBGitRevList* revisionList;
|
||||
@property (retain) PBGitHistoryList *revisionList;
|
||||
@property (assign) NSMutableArray* branches;
|
||||
@property (assign) PBGitRevSpecifier *currentBranch;
|
||||
@property (assign) NSInteger currentBranchFilter;
|
||||
@property (retain) NSMutableDictionary* refs;
|
||||
|
||||
@end
|
||||
|
||||
@@ -15,12 +15,16 @@
|
||||
#import "PBEasyPipe.h"
|
||||
#import "PBGitRef.h"
|
||||
#import "PBGitRevSpecifier.h"
|
||||
#import "PBRemoteProgressSheet.h"
|
||||
#import "PBGitRevList.h"
|
||||
#import "PBGitDefaults.h"
|
||||
|
||||
static NSString * repositoryBasePath = nil;
|
||||
|
||||
@implementation PBGitRepository
|
||||
|
||||
@synthesize revisionList, branches, currentBranch, refs, hasChanged, config;
|
||||
@synthesize currentBranchFilter;
|
||||
|
||||
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
|
||||
{
|
||||
@@ -127,16 +131,16 @@ static NSString * repositoryBasePath = nil;
|
||||
|
||||
[self setFileURL:gitDirURL];
|
||||
[self setup];
|
||||
[self readCurrentBranch];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void) setup
|
||||
{
|
||||
config = [[PBGitConfig alloc] initWithRepository:[[self fileURL] path]];
|
||||
config = [[PBGitConfig alloc] initWithRepositoryPath:[[self fileURL] path]];
|
||||
self.branches = [NSMutableArray array];
|
||||
[self reloadRefs];
|
||||
revisionList = [[PBGitRevList alloc] initWithRepository:self];
|
||||
currentBranchFilter = [PBGitDefaults branchFilter];
|
||||
revisionList = [[PBGitHistoryList alloc] initWithRepository:self];
|
||||
}
|
||||
|
||||
- (id) initWithURL: (NSURL*) path
|
||||
@@ -164,22 +168,35 @@ static NSString * repositoryBasePath = nil;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) forceUpdateRevisions
|
||||
{
|
||||
[revisionList forceUpdate];
|
||||
}
|
||||
|
||||
- (BOOL)isDocumentEdited
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
// The fileURL the document keeps is to the .git dir, but that’s pretty
|
||||
// useless for display in the window title bar, so we show the directory above
|
||||
- (NSString*)displayName
|
||||
{
|
||||
NSString* dirName = [[[self fileURL] path] lastPathComponent];
|
||||
if ([dirName isEqualToString:@".git"])
|
||||
dirName = [[[[self fileURL] path] stringByDeletingLastPathComponent] lastPathComponent];
|
||||
NSString* displayName;
|
||||
if (![[PBGitRef refFromString:[[self headRef] simpleRef]] type]) {
|
||||
displayName = [NSString stringWithFormat:@"%@ (detached HEAD)", dirName];
|
||||
} else {
|
||||
displayName = [NSString stringWithFormat:@"%@ (branch: %@)", dirName,
|
||||
[[self headRef] description]];
|
||||
}
|
||||
|
||||
return displayName;
|
||||
- (NSString *) displayName
|
||||
{
|
||||
if (![[PBGitRef refFromString:[[self headRef] simpleRef]] type])
|
||||
return [NSString stringWithFormat:@"%@ (detached HEAD)", [self projectName]];
|
||||
|
||||
return [NSString stringWithFormat:@"%@ (branch: %@)", [self projectName], [[self headRef] description]];
|
||||
}
|
||||
|
||||
- (NSString *) projectName
|
||||
{
|
||||
NSString *projectPath = [[self fileURL] path];
|
||||
|
||||
if ([[projectPath lastPathComponent] isEqualToString:@".git"])
|
||||
projectPath = [projectPath stringByDeletingLastPathComponent];
|
||||
|
||||
return [projectPath lastPathComponent];
|
||||
}
|
||||
|
||||
// Get the .gitignore file at the root of the repository
|
||||
@@ -230,49 +247,41 @@ static NSString * repositoryBasePath = nil;
|
||||
[refs setObject:[NSMutableArray arrayWithObject:ref] forKey:sha];
|
||||
}
|
||||
|
||||
// reloadRefs: reload all refs in the repository, like in readRefs
|
||||
// To stay compatible, this does not remove a ref from the branches list
|
||||
// even after it has been deleted.
|
||||
// returns YES when a ref was changed
|
||||
- (BOOL) reloadRefs
|
||||
- (void) reloadRefs
|
||||
{
|
||||
_headRef = nil;
|
||||
BOOL ret = NO;
|
||||
|
||||
refs = [NSMutableDictionary dictionary];
|
||||
NSMutableArray *oldBranches = [branches mutableCopy];
|
||||
|
||||
NSString * binPath = [PBGitBinary path];
|
||||
NSString * dirPath = [[self fileURL] path];
|
||||
NSString* output = [PBEasyPipe outputForCommand:binPath
|
||||
withArgs:[NSArray arrayWithObjects:@"for-each-ref", @"--format=%(refname) %(objecttype) %(objectname)"
|
||||
" %(*objectname)", @"refs", nil]
|
||||
inDir:dirPath];
|
||||
NSArray* lines = [output componentsSeparatedByString:@"\n"];
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"for-each-ref", @"--format=%(refname) %(objecttype) %(objectname) %(*objectname)", @"refs", nil];
|
||||
NSString *output = [self outputForArguments:arguments];
|
||||
NSArray *lines = [output componentsSeparatedByString:@"\n"];
|
||||
|
||||
for (NSString* line in lines) {
|
||||
for (NSString *line in lines) {
|
||||
// If its an empty line, skip it (e.g. with empty repositories)
|
||||
if ([line length] == 0)
|
||||
continue;
|
||||
|
||||
NSArray* components = [line componentsSeparatedByString:@" "];
|
||||
NSArray *components = [line componentsSeparatedByString:@" "];
|
||||
|
||||
// First do the ref matching. If this ref is new, add it to our ref list
|
||||
PBGitRef *newRef = [PBGitRef refFromString:[components objectAtIndex:0]];
|
||||
PBGitRevSpecifier* revSpec = [[PBGitRevSpecifier alloc] initWithRef:newRef];
|
||||
if ([self addBranch:revSpec] != revSpec)
|
||||
ret = YES;
|
||||
PBGitRevSpecifier *revSpec = [[PBGitRevSpecifier alloc] initWithRef:newRef];
|
||||
|
||||
// Also add this ref to the refs list
|
||||
[self addBranch:revSpec];
|
||||
[self addRef:newRef fromParameters:components];
|
||||
[oldBranches removeObject:revSpec];
|
||||
}
|
||||
|
||||
// Add an "All branches" option in the branches list
|
||||
[self addBranch:[PBGitRevSpecifier allBranchesRevSpec]];
|
||||
[self addBranch:[PBGitRevSpecifier localBranchesRevSpec]];
|
||||
for (PBGitRevSpecifier *branch in oldBranches)
|
||||
if ([branch isSimpleRef] && ![branch isEqual:[self headRef]])
|
||||
[self removeBranch:branch];
|
||||
|
||||
[self willChangeValueForKey:@"refs"];
|
||||
[self didChangeValueForKey:@"refs"];
|
||||
|
||||
[[[self windowController] window] setTitle:[self displayName]];
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (void) lazyReload
|
||||
@@ -280,8 +289,7 @@ static NSString * repositoryBasePath = nil;
|
||||
if (!hasChanged)
|
||||
return;
|
||||
|
||||
[self reloadRefs];
|
||||
[self.revisionList reload];
|
||||
[self.revisionList updateHistory];
|
||||
hasChanged = NO;
|
||||
}
|
||||
|
||||
@@ -298,35 +306,157 @@ static NSString * repositoryBasePath = nil;
|
||||
|
||||
return _headRef;
|
||||
}
|
||||
|
||||
// Returns either this object, or an existing, equal object
|
||||
- (PBGitRevSpecifier*) addBranch: (PBGitRevSpecifier*) rev
|
||||
|
||||
- (NSString *) headSHA
|
||||
{
|
||||
if ([[rev parameters] count] == 0)
|
||||
rev = [self headRef];
|
||||
|
||||
// First check if the branch doesn't exist already
|
||||
for (PBGitRevSpecifier* r in branches)
|
||||
if ([rev isEqualTo: r])
|
||||
return r;
|
||||
|
||||
[self willChangeValueForKey:@"branches"];
|
||||
[branches addObject: rev];
|
||||
[self didChangeValueForKey:@"branches"];
|
||||
return rev;
|
||||
return [self shaForRef:[[self headRef] ref]];
|
||||
}
|
||||
|
||||
- (BOOL)removeBranch:(PBGitRevSpecifier *)rev
|
||||
- (PBGitCommit *) headCommit
|
||||
{
|
||||
for (PBGitRevSpecifier *r in branches) {
|
||||
if ([rev isEqualTo:r]) {
|
||||
[self willChangeValueForKey:@"branches"];
|
||||
[branches removeObject:r];
|
||||
[self didChangeValueForKey:@"branches"];
|
||||
return TRUE;
|
||||
return [self commitForSHA:[self headSHA]];
|
||||
}
|
||||
|
||||
- (NSString *) shaForRef:(PBGitRef *)ref
|
||||
{
|
||||
if (!ref)
|
||||
return nil;
|
||||
|
||||
for (NSString *sha in refs)
|
||||
for (PBGitRef *existingRef in [refs objectForKey:sha])
|
||||
if ([existingRef isEqualToRef:ref])
|
||||
return sha;
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *args = [NSArray arrayWithObjects:@"rev-list", @"-1", [ref ref], nil];
|
||||
NSString *shaForRef = [self outputInWorkdirForArguments:args retValue:&retValue];
|
||||
if (retValue || [shaForRef isEqualToString:@""])
|
||||
return nil;
|
||||
|
||||
return shaForRef;
|
||||
}
|
||||
|
||||
- (PBGitCommit *) commitForRef:(PBGitRef *)ref
|
||||
{
|
||||
if (!ref)
|
||||
return nil;
|
||||
|
||||
return [self commitForSHA:[self shaForRef:ref]];
|
||||
}
|
||||
|
||||
- (PBGitCommit *) commitForSHA:(NSString *)sha
|
||||
{
|
||||
if (!sha)
|
||||
return nil;
|
||||
NSArray *revList = revisionList.projectCommits;
|
||||
|
||||
for (PBGitCommit *commit in revList)
|
||||
if ([[commit realSha] isEqualToString:sha])
|
||||
return commit;
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (BOOL) isOnSameBranch:(NSString *)branchSHA asSHA:(NSString *)testSHA
|
||||
{
|
||||
if (!branchSHA || !testSHA)
|
||||
return NO;
|
||||
|
||||
if ([testSHA isEqualToString:branchSHA])
|
||||
return YES;
|
||||
|
||||
NSArray *revList = revisionList.projectCommits;
|
||||
|
||||
NSMutableSet *searchSHAs = [NSMutableSet setWithObject:branchSHA];
|
||||
|
||||
for (PBGitCommit *commit in revList) {
|
||||
NSString *commitSHA = [commit realSha];
|
||||
if ([searchSHAs containsObject:commitSHA]) {
|
||||
if ([testSHA isEqualToString:commitSHA])
|
||||
return YES;
|
||||
[searchSHAs removeObject:commitSHA];
|
||||
[searchSHAs addObjectsFromArray:commit.parents];
|
||||
}
|
||||
else if ([testSHA isEqualToString:commitSHA])
|
||||
return NO;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL) isSHAOnHeadBranch:(NSString *)testSHA
|
||||
{
|
||||
if (!testSHA)
|
||||
return NO;
|
||||
|
||||
NSString *headSHA = [self headSHA];
|
||||
|
||||
if ([testSHA isEqualToString:headSHA])
|
||||
return YES;
|
||||
|
||||
return [self isOnSameBranch:headSHA asSHA:testSHA];
|
||||
}
|
||||
|
||||
- (BOOL) isRefOnHeadBranch:(PBGitRef *)testRef
|
||||
{
|
||||
if (!testRef)
|
||||
return NO;
|
||||
|
||||
return [self isSHAOnHeadBranch:[self shaForRef:testRef]];
|
||||
}
|
||||
|
||||
- (BOOL) checkRefFormat:(NSString *)refName
|
||||
{
|
||||
int retValue = 1;
|
||||
[self outputInWorkdirForArguments:[NSArray arrayWithObjects:@"check-ref-format", refName, nil] retValue:&retValue];
|
||||
if (retValue)
|
||||
return NO;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) refExists:(PBGitRef *)ref
|
||||
{
|
||||
int retValue = 1;
|
||||
NSString *output = [self outputInWorkdirForArguments:[NSArray arrayWithObjects:@"for-each-ref", [ref ref], nil] retValue:&retValue];
|
||||
if (retValue || [output isEqualToString:@""])
|
||||
return NO;
|
||||
return YES;
|
||||
}
|
||||
|
||||
// Returns either this object, or an existing, equal object
|
||||
- (PBGitRevSpecifier*) addBranch:(PBGitRevSpecifier*)branch
|
||||
{
|
||||
if ([[branch parameters] count] == 0)
|
||||
branch = [self headRef];
|
||||
|
||||
// First check if the branch doesn't exist already
|
||||
for (PBGitRevSpecifier *rev in branches)
|
||||
if ([branch isEqual: rev])
|
||||
return rev;
|
||||
|
||||
NSIndexSet *newIndex = [NSIndexSet indexSetWithIndex:[branches count]];
|
||||
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:newIndex forKey:@"branches"];
|
||||
|
||||
[branches addObject:branch];
|
||||
|
||||
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:newIndex forKey:@"branches"];
|
||||
return branch;
|
||||
}
|
||||
|
||||
- (BOOL) removeBranch:(PBGitRevSpecifier *)branch
|
||||
{
|
||||
for (PBGitRevSpecifier *rev in branches) {
|
||||
if ([branch isEqual:rev]) {
|
||||
NSIndexSet *oldIndex = [NSIndexSet indexSetWithIndex:[branches indexOfObject:rev]];
|
||||
[self willChange:NSKeyValueChangeRemoval valuesAtIndexes:oldIndex forKey:@"branches"];
|
||||
|
||||
[branches removeObject:rev];
|
||||
|
||||
[self didChange:NSKeyValueChangeRemoval valuesAtIndexes:oldIndex forKey:@"branches"];
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void) readCurrentBranch
|
||||
@@ -343,7 +473,404 @@ static NSString * repositoryBasePath = nil;
|
||||
return [PBGitBinary path];
|
||||
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark Remotes
|
||||
|
||||
- (NSArray *) remotes
|
||||
{
|
||||
int retValue = 1;
|
||||
NSString *remotes = [self outputInWorkdirForArguments:[NSArray arrayWithObject:@"remote"] retValue:&retValue];
|
||||
if (retValue || [remotes isEqualToString:@""])
|
||||
return nil;
|
||||
|
||||
return [remotes componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
|
||||
}
|
||||
|
||||
- (BOOL) hasRemotes
|
||||
{
|
||||
return ([self remotes] != nil);
|
||||
}
|
||||
|
||||
- (PBGitRef *) remoteRefForBranch:(PBGitRef *)branch error:(NSError **)error
|
||||
{
|
||||
if ([branch isRemote])
|
||||
return [branch remoteRef];
|
||||
|
||||
NSString *branchName = [branch branchName];
|
||||
if (branchName) {
|
||||
NSString *remoteName = [[self config] valueForKeyPath:[NSString stringWithFormat:@"branch.%@.remote", branchName]];
|
||||
if (remoteName && ([remoteName isKindOfClass:[NSString class]] && ![remoteName isEqualToString:@""])) {
|
||||
PBGitRef *remoteRef = [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:remoteName]];
|
||||
// check that the remote is a valid ref and exists
|
||||
if ([self checkRefFormat:[remoteRef ref]] && [self refExists:remoteRef])
|
||||
return remoteRef;
|
||||
}
|
||||
}
|
||||
|
||||
if (error != NULL) {
|
||||
NSString *info = [NSString stringWithFormat:@"There is no remote configured for the %@ '%@'.\n\nPlease select a branch from the popup menu, which has a corresponding remote tracking branch set up.\n\nYou can also use a contextual menu to choose a branch by right clicking on its label in the commit history list.", [branch refishType], [branch shortName]];
|
||||
*error = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0
|
||||
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||
@"No remote configured for branch", NSLocalizedDescriptionKey,
|
||||
info, NSLocalizedRecoverySuggestionErrorKey,
|
||||
nil]];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString *) infoForRemote:(NSString *)remoteName
|
||||
{
|
||||
int retValue = 1;
|
||||
NSString *output = [self outputInWorkdirForArguments:[NSArray arrayWithObjects:@"remote", @"show", remoteName, nil] retValue:&retValue];
|
||||
if (retValue)
|
||||
return nil;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
#pragma mark Repository commands
|
||||
|
||||
- (void) cloneRepositoryToPath:(NSString *)path bare:(BOOL)isBare
|
||||
{
|
||||
if (!path || [path isEqualToString:@""])
|
||||
return;
|
||||
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"clone", @"--no-hardlinks", @"--", @".", path, nil];
|
||||
if (isBare)
|
||||
[arguments insertObject:@"--bare" atIndex:1];
|
||||
|
||||
NSString *description = [NSString stringWithFormat:@"Cloning the repository %@ to %@", [self projectName], path];
|
||||
NSString *title = @"Cloning Repository";
|
||||
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inRepository:self];
|
||||
}
|
||||
|
||||
- (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"];
|
||||
|
||||
if (![ref isRemote]) {
|
||||
NSError *error = nil;
|
||||
ref = [self remoteRefForBranch:ref error:&error];
|
||||
if (!ref) {
|
||||
if (error)
|
||||
[self.windowController showErrorSheet:error];
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSString *remoteName = [ref remoteName];
|
||||
[arguments addObject:remoteName];
|
||||
|
||||
NSString *description = [NSString stringWithFormat:@"Fetching all tracking branches from %@", remoteName];
|
||||
NSString *title = @"Fetching from remote";
|
||||
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inRepository:self];
|
||||
}
|
||||
|
||||
- (void) beginPullFromRemote:(PBGitRef *)remoteRef forRef:(PBGitRef *)ref
|
||||
{
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObject:@"pull"];
|
||||
|
||||
// a nil remoteRef means lookup the ref's default remote
|
||||
if (!remoteRef || ![remoteRef isRemote]) {
|
||||
NSError *error = nil;
|
||||
remoteRef = [self remoteRefForBranch:ref error:&error];
|
||||
if (!remoteRef) {
|
||||
if (error)
|
||||
[self.windowController showErrorSheet:error];
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSString *remoteName = [remoteRef remoteName];
|
||||
[arguments addObject:remoteName];
|
||||
|
||||
NSString *branchName = nil;
|
||||
NSString *refSpec = nil;
|
||||
if ([ref isRemoteBranch]) {
|
||||
branchName = [ref shortName];
|
||||
refSpec = [ref remoteBranchName];
|
||||
}
|
||||
else if ([ref isRemote] || !ref) {
|
||||
branchName = @"all tracking branches";
|
||||
}
|
||||
else {
|
||||
branchName = [ref shortName];
|
||||
refSpec = [NSString stringWithFormat:@"%@:%@", branchName, branchName];
|
||||
}
|
||||
if (refSpec)
|
||||
[arguments addObject:refSpec];
|
||||
|
||||
NSString *headRefName = [[[self headRef] ref] shortName];
|
||||
NSString *description = [NSString stringWithFormat:@"Pulling %@ from %@ and updating %@", branchName, remoteName, headRefName];
|
||||
NSString *title = @"Pulling from remote";
|
||||
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inRepository:self];
|
||||
}
|
||||
|
||||
- (void) beginPushRef:(PBGitRef *)ref toRemote:(PBGitRef *)remoteRef
|
||||
{
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObject:@"push"];
|
||||
|
||||
// a nil remoteRef means lookup the ref's default remote
|
||||
if (!remoteRef || ![remoteRef isRemote]) {
|
||||
NSError *error = nil;
|
||||
remoteRef = [self remoteRefForBranch:ref error:&error];
|
||||
if (!remoteRef) {
|
||||
if (error)
|
||||
[self.windowController showErrorSheet:error];
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSString *remoteName = [remoteRef remoteName];
|
||||
[arguments addObject:remoteName];
|
||||
|
||||
NSString *branchName = nil;
|
||||
if ([ref isRemote] || !ref) {
|
||||
branchName = @"all updates";
|
||||
}
|
||||
else if ([ref isTag]) {
|
||||
branchName = [NSString stringWithFormat:@"tag '%@'", [ref tagName]];
|
||||
[arguments addObject:@"tag"];
|
||||
[arguments addObject:[ref tagName]];
|
||||
}
|
||||
else {
|
||||
branchName = [ref shortName];
|
||||
[arguments addObject:branchName];
|
||||
}
|
||||
|
||||
NSString *description = [NSString stringWithFormat:@"Pushing %@ to %@", branchName, remoteName];
|
||||
NSString *title = @"Pushing to remote";
|
||||
[PBRemoteProgressSheet beginRemoteProgressSheetForArguments:arguments title:title description:description inRepository:self];
|
||||
}
|
||||
|
||||
- (BOOL) checkoutRefish:(id <PBGitRefish>)ref
|
||||
{
|
||||
NSString *refName = nil;
|
||||
if ([ref refishType] == kGitXBranchType)
|
||||
refName = [ref shortName];
|
||||
else
|
||||
refName = [ref refishName];
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"checkout", refName, nil];
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error checking out the %@ '%@'.\n\nPerhaps your working directory is not clean?", [ref refishType], [ref shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Checkout failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
[self readCurrentBranch];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) checkoutFiles:(NSArray *)files fromRefish:(id <PBGitRefish>)ref
|
||||
{
|
||||
if (!files || ([files count] == 0))
|
||||
return NO;
|
||||
|
||||
NSString *refName = nil;
|
||||
if ([ref refishType] == kGitXBranchType)
|
||||
refName = [ref shortName];
|
||||
else
|
||||
refName = [ref refishName];
|
||||
|
||||
int retValue = 1;
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"checkout", refName, @"--", nil];
|
||||
[arguments addObjectsFromArray:files];
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error checking out the file(s) from the %@ '%@'.\n\nPerhaps your working directory is not clean?", [ref refishType], [ref shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Checkout failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL) mergeWithRefish:(id <PBGitRefish>)ref
|
||||
{
|
||||
NSString *refName = [ref refishName];
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"merge", refName, nil];
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *headName = [[[self headRef] ref] shortName];
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error merging %@ into %@.", refName, headName];
|
||||
[self.windowController showErrorSheetTitle:@"Merge failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
[self readCurrentBranch];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) cherryPickRefish:(id <PBGitRefish>)ref
|
||||
{
|
||||
if (!ref)
|
||||
return NO;
|
||||
|
||||
NSString *refName = [ref refishName];
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"cherry-pick", refName, nil];
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error cherry picking the %@ '%@'.\n\nPerhaps your working directory is not clean?", [ref refishType], [ref shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Cherry pick failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
[self readCurrentBranch];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) rebaseBranch:(id <PBGitRefish>)branch onRefish:(id <PBGitRefish>)upstream
|
||||
{
|
||||
if (!upstream)
|
||||
return NO;
|
||||
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"rebase", [upstream refishName], nil];
|
||||
|
||||
if (branch)
|
||||
[arguments addObject:[branch refishName]];
|
||||
|
||||
int retValue = 1;
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *branchName = @"HEAD";
|
||||
if (branch)
|
||||
branchName = [NSString stringWithFormat:@"%@ '%@'", [branch refishType], [branch shortName]];
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error rebasing %@ with %@ '%@'.", branchName, [upstream refishType], [upstream shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Rebase failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
[self readCurrentBranch];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) createBranch:(NSString *)branchName atRefish:(id <PBGitRefish>)ref
|
||||
{
|
||||
if (!branchName || !ref)
|
||||
return NO;
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"branch", branchName, [ref refishName], nil];
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error creating the branch '%@' at %@ '%@'.", branchName, [ref refishType], [ref shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Create Branch failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) createTag:(NSString *)tagName message:(NSString *)message atRefish:(id <PBGitRefish>)target
|
||||
{
|
||||
if (!tagName)
|
||||
return NO;
|
||||
|
||||
NSMutableArray *arguments = [NSMutableArray arrayWithObject:@"tag"];
|
||||
|
||||
// if there is a message then make this an annotated tag
|
||||
if (message && ![message isEqualToString:@""] && ([message length] > 3)) {
|
||||
[arguments addObject:@"-a"];
|
||||
[arguments addObject:[@"-m" stringByAppendingString:message]];
|
||||
}
|
||||
|
||||
[arguments addObject:tagName];
|
||||
|
||||
// if no refish then git will add it to HEAD
|
||||
if (target)
|
||||
[arguments addObject:[target refishName]];
|
||||
|
||||
int retValue = 1;
|
||||
NSString *output = [self outputInWorkdirForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *targetName = @"HEAD";
|
||||
if (target)
|
||||
targetName = [NSString stringWithFormat:@"%@ '%@'", [target refishType], [target shortName]];
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error creating the tag '%@' at %@.", tagName, targetName];
|
||||
[self.windowController showErrorSheetTitle:@"Create Tag failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) deleteRemote:(PBGitRef *)ref
|
||||
{
|
||||
if (!ref || ([ref refishType] != kGitXRemoteType))
|
||||
return NO;
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"remote", @"rm", [ref remoteName], nil];
|
||||
NSString * output = [self outputForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error deleting the remote: %@\n\n", [ref remoteName]];
|
||||
[self.windowController showErrorSheetTitle:@"Delete remote failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
// remove the remote's branches
|
||||
NSString *remoteRef = [kGitXRemoteRefPrefix stringByAppendingString:[ref remoteName]];
|
||||
for (PBGitRevSpecifier *rev in [branches copy]) {
|
||||
PBGitRef *branch = [rev ref];
|
||||
if ([[branch ref] hasPrefix:remoteRef]) {
|
||||
[self removeBranch:rev];
|
||||
PBGitCommit *commit = [self commitForRef:branch];
|
||||
[commit removeRef:branch];
|
||||
}
|
||||
}
|
||||
|
||||
[self reloadRefs];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) deleteRef:(PBGitRef *)ref
|
||||
{
|
||||
if (!ref)
|
||||
return NO;
|
||||
|
||||
if ([ref refishType] == kGitXRemoteType)
|
||||
return [self deleteRemote:ref];
|
||||
|
||||
int retValue = 1;
|
||||
NSArray *arguments = [NSArray arrayWithObjects:@"update-ref", @"-d", [ref ref], nil];
|
||||
NSString * output = [self outputForArguments:arguments retValue:&retValue];
|
||||
if (retValue) {
|
||||
NSString *message = [NSString stringWithFormat:@"There was an error deleting the ref: %@\n\n", [ref shortName]];
|
||||
[self.windowController showErrorSheetTitle:@"Delete ref failed!" message:message arguments:arguments output:output];
|
||||
return NO;
|
||||
}
|
||||
|
||||
[self removeBranch:[[PBGitRevSpecifier alloc] initWithRef:ref]];
|
||||
PBGitCommit *commit = [self commitForRef:ref];
|
||||
[commit removeRef:ref];
|
||||
|
||||
[self reloadRefs];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark low level
|
||||
|
||||
- (int) returnValueForCommand:(NSString *)cmd
|
||||
{
|
||||
|
||||
@@ -9,17 +9,24 @@
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@class PBGitRepository;
|
||||
@class PBGitRevSpecifier;
|
||||
|
||||
@interface PBGitRevList : NSObject {
|
||||
NSArray* commits;
|
||||
NSMutableArray *commits;
|
||||
|
||||
PBGitRepository *repository;
|
||||
NSString* lastSha;
|
||||
PBGitRevSpecifier *currentRev;
|
||||
BOOL isGraphing;
|
||||
|
||||
NSThread *parseThread;
|
||||
BOOL isParsing;
|
||||
BOOL resetCommits;
|
||||
}
|
||||
|
||||
- initWithRepository:(PBGitRepository *)repo;
|
||||
- (void) readCommitsForce: (BOOL) force;
|
||||
- (void) reload;
|
||||
- (id) initWithRepository:(PBGitRepository *)repo rev:(PBGitRevSpecifier *)rev shouldGraph:(BOOL)graph;
|
||||
- (void) loadRevisons;
|
||||
|
||||
@property(retain) NSArray* commits;
|
||||
@property (retain) NSMutableArray *commits;
|
||||
@property (readonly) BOOL isParsing;
|
||||
|
||||
@end
|
||||
|
||||
@@ -20,59 +20,81 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
@interface PBGitRevList ()
|
||||
|
||||
@property (assign) BOOL isParsing;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#define kRevListThreadKey @"thread"
|
||||
#define kRevListRevisionsKey @"revisions"
|
||||
|
||||
|
||||
@implementation PBGitRevList
|
||||
|
||||
@synthesize commits;
|
||||
- (id)initWithRepository:(PBGitRepository *)repo
|
||||
@synthesize isParsing;
|
||||
|
||||
|
||||
- (id) initWithRepository:(PBGitRepository *)repo rev:(PBGitRevSpecifier *)rev shouldGraph:(BOOL)graph
|
||||
{
|
||||
repository = repo;
|
||||
[repository addObserver:self forKeyPath:@"currentBranch" options:0 context:nil];
|
||||
isGraphing = graph;
|
||||
currentRev = [rev copy];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) reload
|
||||
|
||||
- (void) loadRevisons
|
||||
{
|
||||
[self readCommitsForce: YES];
|
||||
[parseThread cancel];
|
||||
|
||||
parseThread = [[NSThread alloc] initWithTarget:self selector:@selector(walkRevisionListWithSpecifier:) object:currentRev];
|
||||
self.isParsing = YES;
|
||||
resetCommits = YES;
|
||||
[parseThread start];
|
||||
}
|
||||
|
||||
- (void) readCommitsForce: (BOOL) force
|
||||
{
|
||||
// We use refparse to get the commit sha that we will parse. That way,
|
||||
// we can check if the current branch is the same as the previous one
|
||||
// and in that case we don't have to reload the revision list.
|
||||
|
||||
// If no branch is selected, don't do anything
|
||||
if (![repository currentBranch])
|
||||
- (void) finishedParsing
|
||||
{
|
||||
self.isParsing = NO;
|
||||
}
|
||||
|
||||
|
||||
- (void) updateCommits:(NSDictionary *)update
|
||||
{
|
||||
if ([update objectForKey:kRevListThreadKey] != parseThread)
|
||||
return;
|
||||
|
||||
PBGitRevSpecifier* newRev = [repository currentBranch];
|
||||
NSString* newSha = nil;
|
||||
NSArray *revisions = [update objectForKey:kRevListRevisionsKey];
|
||||
if (!revisions || [revisions count] == 0)
|
||||
return;
|
||||
|
||||
if (!force && newRev && [newRev isSimpleRef]) {
|
||||
newSha = [repository parseReference:[newRev simpleRef]];
|
||||
if ([newSha isEqualToString:lastSha])
|
||||
return;
|
||||
if (resetCommits) {
|
||||
self.commits = [NSMutableArray array];
|
||||
resetCommits = NO;
|
||||
}
|
||||
lastSha = newSha;
|
||||
|
||||
NSThread * commitThread = [[NSThread alloc] initWithTarget: self selector: @selector(walkRevisionListWithSpecifier:) object:newRev];
|
||||
[commitThread start];
|
||||
NSRange range = NSMakeRange([commits count], [revisions count]);
|
||||
NSIndexSet *indexes = [NSIndexSet indexSetWithIndexesInRange:range];
|
||||
|
||||
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@"commits"];
|
||||
[commits addObjectsFromArray:revisions];
|
||||
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:@"commits"];
|
||||
}
|
||||
|
||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
|
||||
change:(NSDictionary *)change context:(void *)context
|
||||
{
|
||||
if (object == repository)
|
||||
[self readCommitsForce: NO];
|
||||
}
|
||||
|
||||
- (void) walkRevisionListWithSpecifier: (PBGitRevSpecifier*) rev
|
||||
- (void) walkRevisionListWithSpecifier:(PBGitRevSpecifier*)rev
|
||||
{
|
||||
NSDate *start = [NSDate date];
|
||||
NSMutableArray* revisions = [NSMutableArray array];
|
||||
PBGitGrapher* g = [[PBGitGrapher alloc] initWithRepository: repository];
|
||||
NSMutableArray *revisions = [NSMutableArray array];
|
||||
PBGitGrapher *g = [[PBGitGrapher alloc] initWithRepository:repository];
|
||||
std::map<string, NSStringEncoding> encodingMap;
|
||||
NSThread *currentThread = [NSThread currentThread];
|
||||
|
||||
NSString *formatString = @"--pretty=format:%H\01%e\01%an\01%s\01%P\01%at";
|
||||
BOOL showSign = [rev hasLeftRight];
|
||||
@@ -108,8 +130,15 @@ using namespace std;
|
||||
if (sha[1] == 'i') // Matches 'Final output'
|
||||
{
|
||||
num = 0;
|
||||
[self performSelectorOnMainThread:@selector(setCommits:) withObject:revisions waitUntilDone:NO];
|
||||
g = [[PBGitGrapher alloc] initWithRepository: repository];
|
||||
if ([currentThread isCancelled])
|
||||
break;
|
||||
|
||||
NSDictionary *update = [NSDictionary dictionaryWithObjectsAndKeys:currentThread, kRevListThreadKey, revisions, kRevListRevisionsKey, nil];
|
||||
[self performSelectorOnMainThread:@selector(updateCommits:) withObject:update waitUntilDone:NO];
|
||||
revisions = [NSMutableArray array];
|
||||
|
||||
if (isGraphing)
|
||||
g = [[PBGitGrapher alloc] initWithRepository:repository];
|
||||
revisions = [NSMutableArray array];
|
||||
|
||||
// If the length is < 40, then there are no commits.. quit now
|
||||
@@ -164,7 +193,6 @@ using namespace std;
|
||||
int time;
|
||||
stream >> time;
|
||||
|
||||
|
||||
[newCommit setSubject:[NSString stringWithCString:subject.c_str() encoding:encoding]];
|
||||
[newCommit setAuthor:[NSString stringWithCString:author.c_str() encoding:encoding]];
|
||||
[newCommit setTimestamp:time];
|
||||
@@ -185,18 +213,32 @@ using namespace std;
|
||||
cout << "Error" << endl;
|
||||
|
||||
[revisions addObject: newCommit];
|
||||
[g decorateCommit: newCommit];
|
||||
if (isGraphing)
|
||||
[g decorateCommit:newCommit];
|
||||
|
||||
if (++num % 1000 == 0)
|
||||
[self performSelectorOnMainThread:@selector(setCommits:) withObject:revisions waitUntilDone:NO];
|
||||
if (++num % 1000 == 0) {
|
||||
if ([currentThread isCancelled])
|
||||
break;
|
||||
NSDictionary *update = [NSDictionary dictionaryWithObjectsAndKeys:currentThread, kRevListThreadKey, revisions, kRevListRevisionsKey, nil];
|
||||
[self performSelectorOnMainThread:@selector(updateCommits:) withObject:update waitUntilDone:NO];
|
||||
revisions = [NSMutableArray array];
|
||||
}
|
||||
}
|
||||
|
||||
NSTimeInterval duration = [[NSDate date] timeIntervalSinceDate:start];
|
||||
#ifdef DEBUG_BUILD
|
||||
NSLog(@"Loaded %i commits in %f seconds", num, duration);
|
||||
#endif
|
||||
// Make sure the commits are stored before exiting.
|
||||
[self performSelectorOnMainThread:@selector(setCommits:) withObject:revisions waitUntilDone:YES];
|
||||
if (![currentThread isCancelled]) {
|
||||
NSTimeInterval duration = [[NSDate date] timeIntervalSinceDate:start];
|
||||
NSLog(@"Loaded %i commits in %f seconds", num, duration);
|
||||
|
||||
// Make sure the commits are stored before exiting.
|
||||
NSDictionary *update = [NSDictionary dictionaryWithObjectsAndKeys:currentThread, kRevListThreadKey, revisions, kRevListRevisionsKey, nil];
|
||||
[self performSelectorOnMainThread:@selector(updateCommits:) withObject:update waitUntilDone:YES];
|
||||
|
||||
[self performSelectorOnMainThread:@selector(finishedParsing) withObject:nil waitUntilDone:NO];
|
||||
}
|
||||
else {
|
||||
NSLog(@"[%@ %s] thread has been canceled", [self class], _cmd);
|
||||
}
|
||||
|
||||
[task waitUntilExit];
|
||||
}
|
||||
|
||||
|
||||
@@ -9,21 +9,25 @@
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <PBGitRef.h>
|
||||
|
||||
@interface PBGitRevSpecifier : NSObject {
|
||||
@interface PBGitRevSpecifier : NSObject <NSCopying> {
|
||||
NSString *description;
|
||||
NSArray *parameters;
|
||||
NSURL *workingDirectory;
|
||||
BOOL isSimpleRef;
|
||||
}
|
||||
|
||||
- (id) initWithParameters:(NSArray*) params;
|
||||
- (id) initWithRef: (PBGitRef*) ref;
|
||||
|
||||
- (BOOL) isSimpleRef;
|
||||
- (NSString*) simpleRef;
|
||||
- (PBGitRef *) ref;
|
||||
- (BOOL) hasPathLimiter;
|
||||
- (BOOL) hasLeftRight;
|
||||
- (NSString *) title;
|
||||
|
||||
- (BOOL) isEqualTo: (PBGitRevSpecifier*) other;
|
||||
- (BOOL) isEqual: (PBGitRevSpecifier*) other;
|
||||
- (BOOL) isAllBranchesRev;
|
||||
- (BOOL) isLocalBranchesRev;
|
||||
|
||||
+ (PBGitRevSpecifier *)allBranchesRevSpec;
|
||||
+ (PBGitRevSpecifier *)localBranchesRevSpec;
|
||||
@@ -31,5 +35,6 @@
|
||||
@property(retain) NSString *description;
|
||||
@property(readonly) NSArray *parameters;
|
||||
@property(retain) NSURL *workingDirectory;
|
||||
@property(readonly) BOOL isSimpleRef;
|
||||
|
||||
@end
|
||||
|
||||
@@ -12,44 +12,56 @@
|
||||
@implementation PBGitRevSpecifier
|
||||
|
||||
@synthesize parameters, description, workingDirectory;
|
||||
@synthesize isSimpleRef;
|
||||
|
||||
- (id) initWithParameters:(NSArray*) params
|
||||
|
||||
// internal designated init
|
||||
- (id) initWithParameters:(NSArray *)params description:(NSString *)descrip
|
||||
{
|
||||
parameters = params;
|
||||
description = nil;
|
||||
description = descrip;
|
||||
|
||||
if (([parameters count] > 1) || ([parameters count] == 0))
|
||||
isSimpleRef = NO;
|
||||
else {
|
||||
NSString *param = [parameters objectAtIndex:0];
|
||||
if ([param hasPrefix:@"-"] ||
|
||||
[param rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"^@{}~:"]].location != NSNotFound ||
|
||||
[param rangeOfString:@".."].location != NSNotFound)
|
||||
isSimpleRef = NO;
|
||||
else
|
||||
isSimpleRef = YES;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) initWithRef: (PBGitRef*) ref
|
||||
- (id) initWithParameters:(NSArray *)params
|
||||
{
|
||||
parameters = [NSArray arrayWithObject: ref.ref];
|
||||
description = [ref shortName];
|
||||
[self initWithParameters:params description:nil];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) initWithRef:(PBGitRef *)ref
|
||||
{
|
||||
[self initWithParameters:[NSArray arrayWithObject:ref.ref] description:[ref shortName]];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
parameters = [coder decodeObjectForKey:@"Parameters"];
|
||||
description = [coder decodeObjectForKey:@"Description"];
|
||||
[self initWithParameters:[coder decodeObjectForKey:@"Parameters"] description:[coder decodeObjectForKey:@"Description"]];
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (PBGitRevSpecifier *)allBranchesRevSpec
|
||||
{
|
||||
id revspec = [[PBGitRevSpecifier alloc] initWithParameters:[NSArray arrayWithObject:@"--all"]];
|
||||
[revspec setDescription:@"All branches"];
|
||||
return revspec;
|
||||
return [[PBGitRevSpecifier alloc] initWithParameters:[NSArray arrayWithObject:@"--all"] description:@"All branches"];
|
||||
}
|
||||
|
||||
+ (PBGitRevSpecifier *)localBranchesRevSpec
|
||||
{
|
||||
id revspec = [[PBGitRevSpecifier alloc] initWithParameters:[NSArray arrayWithObject:@"--branches"]];
|
||||
[revspec setDescription:@"Local branches"];
|
||||
return revspec;
|
||||
}
|
||||
- (BOOL) isSimpleRef
|
||||
{
|
||||
return ([parameters count] == 1 && ![[parameters objectAtIndex:0] hasPrefix:@"-"]);
|
||||
return [[PBGitRevSpecifier alloc] initWithParameters:[NSArray arrayWithObject:@"--branches"] description:@"Local branches"];
|
||||
}
|
||||
|
||||
- (NSString*) simpleRef
|
||||
@@ -59,12 +71,42 @@
|
||||
return [parameters objectAtIndex:0];
|
||||
}
|
||||
|
||||
- (NSString*) description
|
||||
- (PBGitRef *) ref
|
||||
{
|
||||
if (description)
|
||||
return description;
|
||||
if (![self isSimpleRef])
|
||||
return nil;
|
||||
|
||||
return [PBGitRef refFromString:[self simpleRef]];
|
||||
}
|
||||
|
||||
- (NSString *) description
|
||||
{
|
||||
if (!description)
|
||||
description = [parameters componentsJoinedByString:@" "];
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
- (NSString *) title
|
||||
{
|
||||
NSString *title = nil;
|
||||
|
||||
return [parameters componentsJoinedByString:@" "];
|
||||
if ([self.description isEqualToString:@"HEAD"])
|
||||
title = @"detached HEAD";
|
||||
else if ([self isSimpleRef])
|
||||
title = [[self ref] shortName];
|
||||
else if ([self.description hasPrefix:@"-S"])
|
||||
title = [self.description substringFromIndex:[@"-S" length]];
|
||||
else if ([self.description hasPrefix:@"HEAD -- "])
|
||||
title = [self.description substringFromIndex:[@"HEAD -- " length]];
|
||||
else if ([self.description hasPrefix:@"-- "])
|
||||
title = [self.description substringFromIndex:[@"-- " length]];
|
||||
else if ([self.description hasPrefix:@"--left-right "])
|
||||
title = [self.description substringFromIndex:[@"--left-right " length]];
|
||||
else
|
||||
title = self.description;
|
||||
|
||||
return [NSString stringWithFormat:@"\"%@\"", title];
|
||||
}
|
||||
|
||||
- (BOOL) hasPathLimiter;
|
||||
@@ -82,17 +124,34 @@
|
||||
return YES;
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL) isEqualTo: (PBGitRevSpecifier*) other
|
||||
|
||||
- (BOOL) isEqual:(PBGitRevSpecifier *)other
|
||||
{
|
||||
if ([self isSimpleRef] ^ [other isSimpleRef])
|
||||
return NO;
|
||||
|
||||
if ([self isSimpleRef])
|
||||
return [[[self parameters] objectAtIndex: 0] isEqualToString: [other.parameters objectAtIndex: 0]];
|
||||
return [[[self parameters] objectAtIndex:0] isEqualToString:[other.parameters objectAtIndex:0]];
|
||||
|
||||
return ([[parameters componentsJoinedByString:@" "] isEqualToString: [other.parameters componentsJoinedByString:@" "]] &&
|
||||
(!description || [description isEqualToString:other.description]));
|
||||
return [self.description isEqualToString:other.description];
|
||||
}
|
||||
|
||||
- (NSUInteger) hash
|
||||
{
|
||||
if ([self isSimpleRef])
|
||||
return [[[self parameters] objectAtIndex:0] hash];
|
||||
|
||||
return [self.description hash];
|
||||
}
|
||||
|
||||
- (BOOL) isAllBranchesRev
|
||||
{
|
||||
return [self isEqual:[PBGitRevSpecifier allBranchesRevSpec]];
|
||||
}
|
||||
|
||||
- (BOOL) isLocalBranchesRev
|
||||
{
|
||||
return [self isEqual:[PBGitRevSpecifier localBranchesRevSpec]];
|
||||
}
|
||||
|
||||
- (void) encodeWithCoder:(NSCoder *)coder
|
||||
@@ -100,4 +159,14 @@
|
||||
[coder encodeObject:description forKey:@"Description"];
|
||||
[coder encodeObject:parameters forKey:@"Parameters"];
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(NSZone *)zone
|
||||
{
|
||||
PBGitRevSpecifier *copy = [[[self class] allocWithZone:zone] initWithParameters:[self.parameters copy]];
|
||||
copy.description = [self.description copy];
|
||||
copy.workingDirectory = [self.workingDirectory copy];
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -149,8 +149,8 @@
|
||||
static const int ref_spacing = 2;
|
||||
|
||||
NSRect lastRect = rect;
|
||||
lastRect.origin.x = round(lastRect.origin.x) - 0.5;
|
||||
lastRect.origin.y = round(lastRect.origin.y) - 0.5;
|
||||
lastRect.origin.x = round(lastRect.origin.x) + 0.5;
|
||||
lastRect.origin.y = round(lastRect.origin.y) + 0.5;
|
||||
|
||||
for (PBGitRef *ref in self.objectValue.refs) {
|
||||
NSMutableDictionary* attributes = [self attributesForRefLabelSelected:NO];
|
||||
@@ -161,9 +161,11 @@
|
||||
newRect.size.height = textSize.height;
|
||||
newRect.origin.y = rect.origin.y + (rect.size.height - newRect.size.height) / 2;
|
||||
|
||||
[array addObject:[NSValue valueWithRect:newRect]];
|
||||
lastRect = newRect;
|
||||
lastRect.origin.x += (int)lastRect.size.width + ref_spacing;
|
||||
if (NSContainsRect(rect, newRect)) {
|
||||
[array addObject:[NSValue valueWithRect:newRect]];
|
||||
lastRect = newRect;
|
||||
lastRect.origin.x += (int)lastRect.size.width + ref_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
@@ -284,20 +286,21 @@
|
||||
return [self menu];
|
||||
|
||||
int i = [self indexAtX:[view convertPointFromBase:[event locationInWindow]].x - rect.origin.x];
|
||||
if (i < 0)
|
||||
return [self menu];
|
||||
|
||||
id ref = [[[self objectValue] refs] objectAtIndex:i];
|
||||
if (!ref)
|
||||
return [self menu];
|
||||
id ref = nil;
|
||||
if (i >= 0)
|
||||
ref = [[[self objectValue] refs] objectAtIndex:i];
|
||||
|
||||
NSArray *items = nil;
|
||||
if (ref)
|
||||
items = [contextMenuDelegate menuItemsForRef:ref];
|
||||
else
|
||||
items = [contextMenuDelegate menuItemsForCommit:[self objectValue]];
|
||||
|
||||
NSMenu *menu = [[NSMenu alloc] init];
|
||||
[menu setAutoenablesItems:NO];
|
||||
NSArray *items = [contextMenuDelegate menuItemsForRef:ref commit:[self objectValue]];
|
||||
for (NSMenuItem *item in items)
|
||||
[menu addItem:item];
|
||||
return menu;
|
||||
|
||||
return [self menu];
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVBranchItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVBranchItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)branchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// PBGitSVBranchItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVBranchItem.h"
|
||||
|
||||
|
||||
@implementation PBGitSVBranchItem
|
||||
|
||||
|
||||
+ (id)branchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
|
||||
{
|
||||
PBGitSVBranchItem *item = [self itemWithTitle:[[revSpecifier description] lastPathComponent]];
|
||||
item.revSpecifier = revSpecifier;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *branchImage = nil;
|
||||
if (!branchImage)
|
||||
branchImage = [NSImage imageNamed:@"Branch.png"];
|
||||
|
||||
return branchImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVFolderItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVFolderItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)folderItemWithTitle:(NSString *)title;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// PBGitSVFolderItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVFolderItem.h"
|
||||
|
||||
|
||||
@implementation PBGitSVFolderItem
|
||||
|
||||
|
||||
+ (id)folderItemWithTitle:(NSString *)title
|
||||
{
|
||||
PBGitSVFolderItem *item = [self itemWithTitle:title];
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *folderImage = nil;
|
||||
if (!folderImage) {
|
||||
folderImage = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)];
|
||||
[folderImage setSize:NSMakeSize(16,16)];
|
||||
}
|
||||
|
||||
return folderImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVOtherRevItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVOtherRevItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)otherItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// PBGitSVOtherRevItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVOtherRevItem.h"
|
||||
#import "PBGitRevSpecifier.h"
|
||||
|
||||
|
||||
@implementation PBGitSVOtherRevItem
|
||||
|
||||
|
||||
+ (id)otherItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
|
||||
{
|
||||
PBGitSVOtherRevItem *item = [self itemWithTitle:[revSpecifier title]];
|
||||
item.revSpecifier = revSpecifier;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *otherRevImage = nil;
|
||||
if (!otherRevImage)
|
||||
otherRevImage = [NSImage imageNamed:@"Branch.png"];
|
||||
|
||||
return otherRevImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVRemoteBranchItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVRemoteBranchItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)remoteBranchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// PBGitSVRemoteBranchItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVRemoteBranchItem.h"
|
||||
|
||||
|
||||
@implementation PBGitSVRemoteBranchItem
|
||||
|
||||
|
||||
+ (id)remoteBranchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
|
||||
{
|
||||
PBGitSVRemoteBranchItem *item = [self itemWithTitle:[[revSpecifier description] lastPathComponent]];
|
||||
item.revSpecifier = revSpecifier;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *remoteBranchImage = nil;
|
||||
if (!remoteBranchImage)
|
||||
remoteBranchImage = [NSImage imageNamed:@"RemoteBranch.png"];
|
||||
|
||||
return remoteBranchImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVRemoteItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVRemoteItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)remoteItemWithTitle:(NSString *)title;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// PBGitSVRemoteItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVRemoteItem.h"
|
||||
#import "PBGitRef.h"
|
||||
|
||||
|
||||
@implementation PBGitSVRemoteItem
|
||||
|
||||
|
||||
+ (id)remoteItemWithTitle:(NSString *)title
|
||||
{
|
||||
PBGitSVRemoteItem *item = [self itemWithTitle:title];
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *networkImage = nil;
|
||||
if (!networkImage) {
|
||||
networkImage = [NSImage imageNamed:NSImageNameNetwork];
|
||||
[networkImage setSize:NSMakeSize(16,16)];
|
||||
}
|
||||
|
||||
return networkImage;
|
||||
}
|
||||
|
||||
|
||||
- (PBGitRef *) ref
|
||||
{
|
||||
return [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:self.title]];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVStageItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVStageItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id) stageItem;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// PBGitSVStageItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVStageItem.h"
|
||||
|
||||
|
||||
@implementation PBGitSVStageItem
|
||||
|
||||
|
||||
+ (id) stageItem
|
||||
{
|
||||
PBGitSVStageItem *item = [self itemWithTitle:@"Stage"];
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *stageImage = nil;
|
||||
if (!stageImage)
|
||||
stageImage = [NSImage imageNamed:@"StageView"];
|
||||
|
||||
return stageImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// PBGitSVTagItem.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBSourceViewItem.h"
|
||||
|
||||
|
||||
@interface PBGitSVTagItem : PBSourceViewItem {
|
||||
|
||||
}
|
||||
|
||||
+ (id)tagItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// PBGitSVTagItem.m
|
||||
// GitX
|
||||
//
|
||||
// Created by Nathan Kinsinger on 3/2/10.
|
||||
// Copyright 2010 Nathan Kinsinger. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PBGitSVTagItem.h"
|
||||
|
||||
|
||||
@implementation PBGitSVTagItem
|
||||
|
||||
|
||||
+ (id)tagItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
|
||||
{
|
||||
PBGitSVTagItem *item = [self itemWithTitle:[[revSpecifier description] lastPathComponent]];
|
||||
item.revSpecifier = revSpecifier;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (NSImage *) icon
|
||||
{
|
||||
static NSImage *tagImage = nil;
|
||||
if (!tagImage)
|
||||
tagImage = [NSImage imageNamed:@"Tag.png"];
|
||||
|
||||
return tagImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,43 @@
|
||||
//
|
||||
// PBGitSidebar.h
|
||||
// GitX
|
||||
//
|
||||
// Created by Pieter de Bie on 9/8/09.
|
||||
// Copyright 2009 __MyCompanyName__. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "PBViewController.h"
|
||||
|
||||
@class PBSourceViewItem;
|
||||
@class PBGitHistoryController;
|
||||
@class PBGitCommitController;
|
||||
|
||||
@interface PBGitSidebarController : PBViewController {
|
||||
IBOutlet NSWindow *window;
|
||||
IBOutlet NSOutlineView *sourceView;
|
||||
IBOutlet NSView *sourceListControlsView;
|
||||
IBOutlet NSPopUpButton *actionButton;
|
||||
IBOutlet NSSegmentedControl *remoteControls;
|
||||
|
||||
NSMutableArray *items;
|
||||
|
||||
/* Specific things */
|
||||
PBSourceViewItem *stage;
|
||||
|
||||
PBSourceViewItem *branches, *remotes, *tags, *others;
|
||||
|
||||
PBGitHistoryController *historyViewController;
|
||||
PBGitCommitController *commitViewController;
|
||||
}
|
||||
|
||||
- (void) selectStage;
|
||||
- (void) selectCurrentBranch;
|
||||
|
||||
- (NSMenu *) menuForRow:(NSInteger)row;
|
||||
|
||||
- (IBAction) fetchPullPushAction:(id)sender;
|
||||
|
||||
@property(readonly) NSMutableArray *items;
|
||||
@property(readonly) NSView *sourceListControlsView;
|
||||
@end
|
||||