Merge remote branch 'brotherbard/experimental' into local branch 'bb/experimental'

This commit is contained in:
André Berg
2010-03-24 01:41:00 +01:00
149 changed files with 24136 additions and 5637 deletions
+3
View File
@@ -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
+60 -22
View File
@@ -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 its 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.
*/
+7
View File
@@ -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;
+1
View File
@@ -71,5 +71,6 @@
- (void)crossFadeView:(NSView *)oldView withView:(NSView *)newView;
- (NSRect)frameForView:(NSView *)view;
- (NSString *)defaultViewIdentifier;
@end
+15 -3
View File
@@ -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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+818
View File
@@ -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>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+807
View File
@@ -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>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+316 -16
View File
@@ -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 */
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+8 -2
View File
@@ -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
+15
View File
@@ -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
+25
View File
@@ -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
+42
View File
@@ -0,0 +1,42 @@
//
// PBAddRemoteSheet.h
// GitX
//
// Created by Nathan Kinsinger on 12/8/09.
// Copyright 2009 Nathan Kinsinger. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class PBGitRepository;
@interface PBAddRemoteSheet : NSWindowController {
PBGitRepository *repository;
NSTextField *remoteName;
NSTextField *remoteURL;
NSTextField *errorMessage;
NSOpenPanel *browseSheet;
NSView *browseAccessoryView;
}
+ (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo;
- (IBAction) browseFolders:(id)sender;
- (IBAction) addRemote:(id)sender;
- (IBAction) orderOutAddRemoteSheet:(id)sender;
- (IBAction) showHideHiddenFiles:(id)sender;
@property (readwrite) PBGitRepository *repository;
@property (readwrite) IBOutlet NSTextField *remoteName;
@property (readwrite) IBOutlet NSTextField *remoteURL;
@property (readwrite) IBOutlet NSTextField *errorMessage;
@property (readwrite) NSOpenPanel *browseSheet;
@property (readwrite) IBOutlet NSView *browseAccessoryView;
@end
+142
View File
@@ -0,0 +1,142 @@
//
// PBAddRemoteSheet.m
// GitX
//
// Created by Nathan Kinsinger on 12/8/09.
// Copyright 2009 Nathan Kinsinger. All rights reserved.
//
#import "PBAddRemoteSheet.h"
#import "PBGitWindowController.h"
#import "PBGitRepository.h"
@interface PBAddRemoteSheet ()
- (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo;
- (void) openAddRemoteSheet;
@end
@implementation PBAddRemoteSheet
@synthesize repository;
@synthesize remoteName;
@synthesize remoteURL;
@synthesize errorMessage;
@synthesize browseSheet;
@synthesize browseAccessoryView;
#pragma mark -
#pragma mark PBAddRemoteSheet
+ (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo
{
PBAddRemoteSheet *sheet = [[self alloc] initWithWindowNibName:@"PBAddRemoteSheet"];
[sheet beginAddRemoteSheetForRepository:repo];
}
- (void) beginAddRemoteSheetForRepository:(PBGitRepository *)repo
{
self.repository = repo;
[self window];
[self openAddRemoteSheet];
}
- (void) openAddRemoteSheet
{
[self.errorMessage setStringValue:@""];
[NSApp beginSheet:[self window] modalForWindow:[self.repository.windowController window] modalDelegate:self didEndSelector:nil contextInfo:NULL];
}
- (void) browseSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)code contextInfo:(void *)info
{
[sheet orderOut:self];
if (code == NSOKButton)
[self.remoteURL setStringValue:[(NSOpenPanel *)sheet filename]];
[self openAddRemoteSheet];
}
#pragma mark IBActions
- (IBAction) browseFolders:(id)sender
{
[self orderOutAddRemoteSheet:nil];
self.browseSheet = [NSOpenPanel openPanel];
[browseSheet setTitle:@"Add remote"];
[browseSheet setMessage:@"Select a folder with a git repository"];
[browseSheet setCanChooseFiles:NO];
[browseSheet setCanChooseDirectories:YES];
[browseSheet setAllowsMultipleSelection:NO];
[browseSheet setCanCreateDirectories:NO];
[browseSheet setAccessoryView:browseAccessoryView];
[browseSheet beginSheetForDirectory:nil file:nil types:nil
modalForWindow:[self.repository.windowController window]
modalDelegate:self
didEndSelector:@selector(browseSheetDidEnd:returnCode:contextInfo:)
contextInfo:NULL];
}
- (IBAction) addRemote:(id)sender
{
[self.errorMessage setStringValue:@""];
NSString *name = [[self.remoteName stringValue] copy];
if ([name isEqualToString:@""]) {
[self.errorMessage setStringValue:@"Remote name is required"];
return;
}
if (![self.repository checkRefFormat:[@"refs/remotes/" stringByAppendingString:name]]) {
[self.errorMessage setStringValue:@"Invalid remote name"];
return;
}
NSString *url = [[self.remoteURL stringValue] copy];
if ([url isEqualToString:@""]) {
[self.errorMessage setStringValue:@"Remote URL is required"];
return;
}
[self orderOutAddRemoteSheet:self];
[self.repository beginAddRemote:name forURL:url];
}
- (IBAction) orderOutAddRemoteSheet:(id)sender
{
[NSApp endSheet:[self window]];
[[self window] orderOut:self];
}
- (IBAction) showHideHiddenFiles:(id)sender
{
// This uses undocumented OpenPanel features to show hidden files (required for 10.5 support)
NSNumber *showHidden = [NSNumber numberWithBool:[sender state] == NSOnState];
[[self.browseSheet valueForKey:@"_navView"] setValue:showHidden forKey:@"showsHiddenFiles"];
}
@end
+1 -1
View File
@@ -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];
}
+41
View File
@@ -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
+199
View File
@@ -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
+33
View File
@@ -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
+80
View File
@@ -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
+10 -6
View File
@@ -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];
+14 -18
View File
@@ -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
+41
View File
@@ -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
+97
View File
@@ -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
+38
View File
@@ -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
+93
View File
@@ -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
+4 -1
View File
@@ -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
+30
View File
@@ -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
+1 -2
View File
@@ -50,8 +50,7 @@
NSPipe* pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
[task setStandardError:pipe];
[task setStandardError:pipe];
return task;
}
+16 -1
View File
@@ -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;
+66 -4
View File
@@ -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
+1 -5
View File
@@ -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;
+11 -5
View File
@@ -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
+80 -454
View File
@@ -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>
+1 -1
View File
@@ -15,5 +15,5 @@
}
@property (copy) NSString *repositoryPath;
- init;
- initWithRepository:(NSString *)path;
- initWithRepositoryPath:(NSString *)path;
@end
+1 -1
View File
@@ -18,7 +18,7 @@
return self;
}
- initWithRepository:(NSString *)path
- initWithRepositoryPath:(NSString *)path
{
repositoryPath = path;
return self;
+15
View File
@@ -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
+88
View File
@@ -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
+19
View File
@@ -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
+52
View File
@@ -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
+46 -22
View File
@@ -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;
+434 -65
View File
@@ -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
+26
View File
@@ -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
+56
View File
@@ -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
+53
View File
@@ -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
+379
View File
@@ -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
+1796 -3747
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -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];
+22 -11
View File
@@ -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
+32 -3
View File
@@ -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;
+108 -8
View File
@@ -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
+27
View File
@@ -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
+47 -4
View File
@@ -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
+593 -66
View File
@@ -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 thats 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
{
+13 -6
View File
@@ -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
+83 -41
View File
@@ -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];
}
+8 -3
View File
@@ -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
+95 -26
View File
@@ -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
+16 -13
View File
@@ -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
+19
View File
@@ -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
+33
View File
@@ -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
+19
View File
@@ -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
+34
View File
@@ -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
+19
View File
@@ -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
+34
View File
@@ -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
+19
View File
@@ -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
+33
View File
@@ -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
+19
View File
@@ -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
+41
View File
@@ -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
+19
View File
@@ -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
+32
View File
@@ -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
+19
View File
@@ -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
+33
View File
@@ -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
+43
View File
@@ -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

Some files were not shown because too many files have changed in this diff Show More