Cornerstone and Mac OS X 10.7 Lion

Filed under: Cornerstone,News — Administrator @ 4:55 am

Mac OS X 10.7 Lion is almost here and we’re really excited about Apple’s new operating system. It brings a number of great features from iOS to the Mac and we’re sure Cornerstone’s users will want to move to Lion as soon as possible.

We have been testing Cornerstone on the various pre-release versions of Mac OS X 10.7 over the past four months.

Cornerstone runs well on Lion but does exhibit a couple of issues, so we’ve been very busy fixing and tweaking the app to ensure that it runs as well on Lion as it does on Snow Leopard.

Cornerstone 2

We want the upgrade to Lion to be as smooth as possible for Cornerstone users, so we planned our next update to coincide with Lion’s release. This new version will bring full Lion compatibility to Cornerstone 2, while still supporting 10.5 Leopard and 10.6 Snow Leopard.

The update has been submitted to Apple for review. We intend to release it simultaneously via the Mac App Store and our own software update once the review process is complete.

We can’t be sure how long this will take, but hope that the update will be available for Lion’s release.

Cornerstone 1.x

We will be releasing a minor update to 1.5 though software update in the coming days. This update solves the biggest issues on Lion, ensuring that Cornerstone is fully-functional.

Some minor cosmetic issues do remain though. You’ll need to upgrade to Cornerstone 2 for the best possible fit and finish when running on Lion!

The Long and Winding Road

Filed under: Cornerstone — Simon @ 3:16 am

Cornerstone’s release to the Mac App Store yesterday marked the end of a 6-month process.

We made a couple of mistakes along the way, so we thought that we’d document some of them in the hope that it might be useful to others intending to submit their apps to the Mac App Store.

The Sitdown

Apple approached us back at the beginning of November to discuss getting Cornerstone into the Mac App Store at launch. They even took the time to meet us in Zurich to help us get started and to answer any technical questions.

We immediately set about registering with the Mac Developer Program and modifying the app to meet Apple’s requirements.

The fruit of these labors has been visible for some time and some users probably noticed that the software update-related preferences were moved to their own preference pane in 2.0.3.

This was in preparation for our first submission to the Mac App Store back in mid-November.

A Little Less Sparkle

Unfortunately Cornerstone was rejected at the beginning of January. Apple’s review guidelines state that an app may not use any installation technology other than the Mac App Store and Cornerstone inadvertently violated that rule.

Cornerstone has historically used Sparkle to check for updates and although we completely removed the Sparkle framework along with all related UI, the app’s .plist file contained a vestigial configuration entry for Cornerstone’s appcast feed.

Lesson learned:

Make absolutely sure that all traces of Sparkle or alternative installation or updating technologies are removed before submitting an app for review.

Obvious in hindsight, but nonetheless easily overlooked.

Info.plist Permissions

Our solution for the Sparkle .plist entries involved using the defaults command-line tool to remove the SUFeedURL entry during the Cornerstone build.

An unfortunate side effect of using the defaults tool is that the Info.plist file is converted from XML to binary format in the process. Luckily we spotted this during testing and implemented a fix: the modified Info.plist file is now converted back to XML using the plutil -convert xml1 command.

What we didn’t expect is that the plutil tool changes the permissions of the output file to be:

-rw-------

Erm, oops! With an Info.plist file like that Cornerstone can only be launched by the person that installed the app. This isn’t a problem for most users but it is for apps installed from the Mac App Store.

Thankfully, Apple’s review procedure caught this issue and Cornerstone was rejected a second time.

Lesson learned:

Test app installation with the installer tool provided by Apple. Be sure to run the tool as an admin user other than yourself.

We should have been doing this but hadn’t done our homework: Apple’s Submitting to the Mac App Store documentation clearly mandates that developers perform this test in advance of submission.

Window Resizing

We were rejected a third time in March. The reason? Resizing the main application window to a very small size resulted in unrecoverable layout issues.

We promptly fixed this in 2.2 by defining a minimum size for the main window. We also improved the collapsing behavior of the inspector to better deal with small window sizes.

Lesson learned:

Test the behavior of your app’s UI when the window is resized to it’s minimum size. If you haven’t defined a minimum size for your app’s window then you should probably consider doing so.

Some might claim that Apple is being overly pedantic, but we disagree. An app’s UI should be predictable at all sizes and fixing this improved the quality of Cornerstone.

In Summary

It’s been a long and winding road. And we’ve only described a couple of the roadblocks we encountered along the way.

There were many other things that we had to do to get Cornerstone into the Mac App Store:

  • Create a build without PPC code
  • Remove the licensing and Sparkle UIs
  • Remove their accompanying frameworks
  • Add Mac App Store receipt verification and authentication
  • Adapt the app’s configuration to meet Mac App Store requirements

The list goes on and on.

But it was worth it. We strive to make excellent Mac software and part of the challenge is providing a user experience consistent with Mac conventions and idioms.

Before January 6th 2011 that meant shipping your app as a .zip file or disk image. Now it means being on the Mac App Store.

Thanks

Finally, we’d like to take this opportunity to thank the guys at Apple that supported us on numerous occasions over the last six months.

We won’t mention any names, but if you’re reading this: Thanks. Your help was very greatly appreciated!

Cornerstone 2 Available on the Mac App Store » Press Release

Filed under: Cornerstone,News,Press Releases — Administrator @ 7:34 am

Mac App Store

ZURICH, Switzerland – April 26th 2011

Zennaware is pleased to announce that Cornerstone, the ultimate Subversion app for Mac OS X is immediately available for purchase on the Mac App Store.

Cornerstone is priced at $59.

Zennaware will also continue to sell Cornerstone direct to customers through the online store on zennaware.com.

About Zennaware

Zennaware is a small independent software vender which develops high-quality applications exclusively for Apple’s Mac line of computers to run on Mac OS X. Zennaware is located in Zurich, Switzerland.

Press Contacts

For press-related questions please contact press@zennaware.com.

Release Notes for 2.2.1

Filed under: Cornerstone,Release Notes — Administrator @ 4:40 am

2.2.1 is a maintenance release which solves issues uncovered since the release of 2.2.

See Release Notes for 2.2 for more information on the new features and improvements introduced with 2.2.

Resolved Issues

# Description
1148 Non-default values for the Subversion global-ignores option are not displayed in the “Global Ignores” field in the Subversion preference pane when the window is opened
1149 Some activities (e.g. commit) which result in errors re-appear in the “ACTIVITIES” area when subsequent operations are started
1150 Inspector fields for standard properties do not revert to display working state when “Revert to Saved” is clicked

Release Notes for 2.2

Filed under: Cornerstone,Release Notes — Administrator @ 3:39 am

2.2 is a free upgrade for all Cornerstone 2 license holders.

New Features

  1. Full support added for user-defined Subversion properties

    Cornerstone 2.2 adds support for user-defined Subversion properties (also known as custom properties.)

    The approach taken by Cornerstone differs somewhat to other Subversion client applications, which generally display user-defined properties as simple key-value pairs.

    We believe this approach has several disadvantages for the user:

    1. It is easy to misspell both property names and values. The UI does nothing to reduce the cognitive load for the user.
    2. The properties are not necessarily self-describing, i.e. semantics of the properties are not clear to the end-user and possible values are not described by the UI, often necessitating additional guidelines or documentation.
    3. Values are assumed to be textual. Binary values are not well supported, if they’re supported at all.
    4. Values are assumed to be single-line. Multi-line text is not well supported.

    Instead, Cornerstone allows the user to extend the property tab of the Inspector to add custom fields for user-defined properties. The following field types are supported:

    1. Multi-line text field
    2. Checkbox
    3. Pop-up list
    4. File

    For each field, the name of the underlying property and a descriptive label is specified in the new User Properties preference pane. The property name and (if appropriate) possible values are managed internally by Cornerstone, thus relieving the user from the burden of remembering these details and ensuring that these values are always entered correctly.

    The checkbox field type displays a boolean value as a checkbox and the user can configure the value of the property when the button is checked.

    The pop-up list field type allows the user to define a set of possible choices for the property, along with (optional) textual labels shown in the pop-up list.

    The file field type allows the user to drag a file from Finder to the Inspector to store the contents of the file as a user property. Cornerstone stores additional metadata about the file (e.g. original name, type and thumbnail) in a sidecar property (this behavior can be disabled if inappropriate.) This information is used to restore the file with the correct name and type information when the file is dragged from Cornerstone to Finder.

    User property fields support multiple-selection in just the same way as the standard property fields displayed in the Inspector. As a result user properties can be inspected and assigned for multiple files at once.

    Finally, user property preferences can be shared between multiple Cornerstone users using the Export… button in the user property preference pane. The resultant file can be distributed to other users who can import the user property definitions by double-clicking the property file in Finder. (#141)

  2. Cornerstone sends Growl notifications on completion of long-running commands

    Cornerstone 2.2 notifies Growl of completion of the following commands:

    • Checkout
    • Commit
    • Export
    • Import
    • Switch
    • Update

    Please note that Cornerstone does not include or install the Growl application or preference pane.

    If you wish to receive notifications via Growl then you will need to download and install Growl yourself from the Growl project website.

Performance Improvements

  1. Preference added to control interval for background status checks

    Cornerstone 2 added support for the display of repository status summary badges in the working copy source list. Cornerstone monitors changes in the repository by periodically contacting the repository to get information about a working copy’s source folder. Such periodic checks could have a negative impact on server load.

    Prior to Cornerstone 2.2, it was possible to disable these background status checks, but there was no way to reduce the check frequency: the time interval was set at 5:00 minutes.

    Cornerstone 2.2 adds a new preference which provides the user with greater control over how often the application performs background status checks. The default value is Every 10 minutes (up from 5 minutes in the previous version), which should significantly reduce the load caused by Cornerstone with the default settings.

    If appropriate, the user may increase the frequency of checks by selecting More often (every 5 minutes), or decrease the frequency by selecting Less often (every 30 minutes).

    Background checks can also be disabled by selecting Never. (#1104)

Usability Improvements

  1. User interface of the Import… command was improved

    The layout of the Import sheet displayed when the File > Import… is selected (or a file or folder is dragged onto a repository) was improved. Specifically, the option to check out a working copy for the imported folder is now always visible and more clearly labeled.

    The Import options sheet is now always displayed when a file or folder is dragged from Finder to Cornerstone’s repository browser (options were previously only displayed if the Option key was pressed). This makes the drag/drop user interface consistent with that displayed when the Import… command is used, and improves the visibility of the functions available to check out a working copy after import completion.

  2. Obstructed files are now displayed correctly

    Cornerstone now displays a status image for obstructed files in both the Browser View and Inspector. Obstructed items are also included in the Browser View’s Changed filter. (#1139)

  3. File sizes are now reported in kilobytes

    Cornerstone 2.1 and earlier used a kilobyte size of 1,024 bytes (i.e. a kibibyte, or KiB) when calculating the file sizes displayed in the application’s user interface. This behavior was chosen for consistency with Mac OS X Finder in 10.4 Tiger and 10.5 Leopard.

    Cornerstone 2.2 now uses the kilobyte size of 1,000 bytes as defined by the SI standard. This behavior is consistent with Finder in Mac OS X 10.6 Snow Leopard. As a result, file sizes will be reported as slightly higher than in previous versions of Cornerstone.

    It is important to realize that Microsoft Windows applications generally report file sizes in kibibyte values (i.e. with a kilobyte size of 1,024 bytes) even though the displayed unit is KB, i.e. kilobyte. File sizes are therefore likely to be reported slightly lower by Subversion clients running on Microsoft Windows than by Cornerstone.

  4. Modified items are no longer displayed with bold text in the working copy browser

    In previous versions of Cornerstone, modified working copy items were displayed using a bold font in the working copy browser. Cornerstone 2.2 now displays modified items using the standard non-bold font in order to reduce visual clutter.

  5. Standard property names are no longer shown in the Inspector

    Previous versions of Cornerstone displayed the name of the underlying Subversion property above each field in the Inspector’s Properties tab.

    The property name fields added little functionality to the property tab. Users familiar with Subversion’s standard properties have no difficulty associating the Inspector’s fields with their underlying properties and the fields added nothing other than clutter for less experienced users.

    The property name fields were therefore removed in Cornerstone 2.2.

  6. HTTP timeout field removed from Subversion preferences

    Cornerstone 1.5 and later included an HTTP timeout field in the Subversion communication preference pane that allowed the user to change the value of the http-timeout option in Subversion’s ~/.subversion/servers configuration file.

    Ommitting a value for http-timeout causes Subversion to use a default timeout value of 3,600 seconds, or 1 hour. This high default value guards against timeouts caused by long-running HTTP requests such as those retrieving log or blame information.

    It makes little sense to override such a high timeout value: reducing the value risks timeouts occurring during normal long-running requests, and increasing the timeout to values greater than 1 hour makes little sense in practice.

    As a result, the Timeout field in the Communication section of the Subversion preference pane was removed.

  7. Copy/paste in revision range fields was improved

    Text in revision range fields (e.g. in the merge cherry picking options) is now copied to the clipboard in 1031:1037 format (was previously 1,031 – 1,037).

    This has two advantages:

    1. The text can be unabiguously accepted by the path field when pasted back into the field.
    2. The format is compatible with that accepted by the svn merge command in Terminal.

    (#1119)

  8. UI layout management improved to better handle small window sizes

    In previous versions of Cornerstone, the main window could be resized to be very small, resulting in layout issues which could only fixed by restarting the application at a larger window size.

    2.2 solves this by:

    • Limiting the window to a sensible minimum size which guarantees consistent and usable layout.
    • The Inspector’s width now decreases automatically to better accommodate a reduction in main window size, eventually collapsing if insufficient space is available.
    • The main window is resized to accommodate the Inspector if the window is too small when the Window > Inspector command is used.

    (#1132)

Compatibility

  1. Mac OS X 10.5 Leopard and 10.6 Snow Leopard

    Cornerstone 2.2 is compatible both with Mac OS X 10.5 Leopard and Mac OS X 10.6 Snow Leopard.

    Both Intel and PowerPC processors are supported on Leopard. Only Intel processors are supported on Snow Leopard.

  2. Mac OS X 10.7 Lion

    Cornerstone runs fine on Mac OS X 10.7 Lion Developer Preview 2.

    There are a couple of known glitches, but these do not have a significant impact on the application’s functionality and will be fixed in the run up to Lion’s release this summer.

    Please note that this as-yet unreleased version of Mac OS X is not officially supported.

Compatibility

Backwards Compatibility

Cornerstone 2.2 is fully backwards-compatible with 1.5 and 2.1. All configuration and settings are transparently migrated to version 2 when the new version is run for the first time.

Forwards Compatibility

The Cornerstone 2 configuration databases are forward-compatible with 1.5, i.e. you can run versions 1.5, 2.0, 2.1 and 2.2 against the same configuration databases in your Application Support/Cornerstone folder.

Issues Resolved in Cornerstone 2.2

# Description
141 Custom properties should be editable in the Inspector
1104 Method used to determine working copy out-of-date status for source list badge should be improved to minimize generated server load
1119 Text copied from a revision range field is not correctly interpreted when pasted back into the field
1122 Repository status for files in working copy browser is temporarily cleared when refreshing with “View > Show Repository Status” enabled
1123 Switching working copies fails when there is a repository URL mismatch due to encoded usernames
1125 When renaming a working copy the size of the edit box is too small
1127 It is not possible to add an auto property in the Subversion preference pane if the svn config file does not contain an [auto-props] section
1128 The default value displayed for “Use compression” in the Subversion preference pane should be on (i.e. checked)
1130 Cornerstone does not support comparison of files in externals from a different repository
1132 The layout of Cornerstone’s user interface exhibits problems when the main window is reduced to a very small size
1133 Showing the blame annotations for a file containing lines contributed by an anonymous user results in no blame data being displayed along with an empty annotations legend
1135 Cornerstone does not always remember the visible state of the Inspector when configured for display in a floating panel
1136 The inspector area on the right-most side of the main window is briefly visible when the application is started with the Inspector configured for display in a separate panel
1137 File browser items are sorted incorrectly when sorting by “Kind”
1138 Open panel displayed by path fields is not resizable
1139 Obstructed working copy items are displayed as unmodified in the working copy browser
1143 Cornerstone doesn’t preserve the font changes made to the Log Message text field. The ability to change the font should be removed
1145 The background status and repository monitor queues fail to re-enter the idle state after an energy savings-induced sleep/wake cycle, resulting in Cornerstone displaying the shutdown progress window while quitting
1146 Invoking a context menu for a field in the Inspector causes the displayed item to change if the source list was previously first responder

Release Notes for 2.1.1

Filed under: Cornerstone,Release Notes — Administrator @ 4:32 am

2.1.1 is a maintenance release which solves issues uncovered since the release of 2.1.

2.1.1 is a recommended update for all users running 2.0 and 2.1.

Resolved Issues

# Description
1116 Cornerstone can crash under certain circumstances when a build range in the form “start:end” or “start-end” is entered in the cherry picking merge range field
1117 Revision ranges are not accepted by the cherry picking merge range field on PowerPC Macs
1118 Pressing the Tab key while a path field is first responder enters a tab character into the field instead of making the next field the first responder

Release Notes for 2.1

Filed under: Cornerstone,Release Notes — Administrator @ 8:55 am

2.1 is a free upgrade for all Cornerstone 2 license holders.

New Features

  1. Working copies can now be switched

    While many users find it convenient to check out a separate working copy for each branch they work on, switching a single working copy between branches is an important part of the workflow for many Subversion users.

    For this reason, 2.1 brings full support for switching working copies to Cornerstone.

    The new Switch… function on the Working Copy menu enables the switching of entire working copies as well individual files and folders.

    Switched items in a working copy are easily identified by a new status icon in both the working copy browser and inspector panel, and the new Switched filter enables the user to quickly find switched items if necessary. (#520)

  2. Revisions can be browsed in the repository browser

    A new revision field in the repository browser’s filter bar allows the user to specify the revision to be browsed.

    All functions available in the repository browser (tag, branch, export, etc.) were modified to behave appropriately with non-HEAD revisions. (#427)

  3. Improved copy and move interface in browser views

    Cornerstone has provided drag and drop support for copying and moving items in browser views since version 1.0. Cornerstone 2.1 extends this copy and move support by adding new Duplicate… and Move… functions to the File menu.

    These functions present the user with a simple browser interface for the selection of the destination folder.

    In addition, the user can specify/select a destination folder in another repository or working copy, thus enabling:

    • Copying between working copies.
    • Copying between working copies and repositories.

    Copying between working copies and repositories requires that the source and destination relate to the same repository. It is not possible, for example, to copy from one repository to another. (#157)

  4. Undelete function was added to the Log View

    The Log View’s toolbar now contains an Undelete item. This button is enabled when a deletion is selected from a revision’s change list.

    Clicking Undelete results in an options window being displayed allowing the user to specify the name and location of the undeleted file/folder. (#925)

  5. Working copies can now be relocated

    Cornerstone 2.1 adds a Relocate To function to the Working Copy menu.

    This enables a working copy to be updated to use a different URL to access the same repository without having to check out a new working copy or resort to using svn switch --relocate on the command line.

    This is useful when:

    • A repository is moved to a server with a different name

    • Changing the protocol used to access the repository (e.g. changing from HTTP to HTTPS)

    • The path to the repository is changed. For example a server which previously hosted a single repository is reconfigured to host multiple ones, therefore necessitating the introduction of a repository name into the path

    • The port used to serve the repository is changed

  6. File types to be compared as text are now user-configurable

    A number of users have informed us in the past that they were unable to compare text files in Cornerstone. Further investigation always indicated the same cause: conflicting or incorrect registration of the file’s Uniform Type Identifier (UTI).

    This situation was, in most cases, difficult or impossible for the user to resolve. Deinstallation of the application responsible for the incorrect UTI solved the problem in many instances, but this is obviously not an option in all cases.

    We have therefore improved Cornerstone to allow the user to override the default UTI-based method for file type detection by specifying which files should always be treated as text in the compare view.

    The majority of Cornerstone users will never need to override the default type detection behavior. But for the few that do there is a new field in the Advanced preference pane which allows them to specify the names (or patterns) of files which should always be treated as text. (#483)

Performance Improvements

  1. Scrolling performance of file browser views was improved

    2.0 unfortunately included a regression which negatively affected the scrolling performance of the file browser views. This issue was resolved for 2.1 resulting in significantly improved responsiveness when scrolling.

Usability Improvements

  1. Working copies are relocated when the settings are changed for the related repository

    Each working copy maintains a back-reference to the URL of the repository it was originally checked out from.

    This URL is now updated when the communication settings (e.g. server name, protocol, port, user name etc.) are modified for the working copy’s originating repository. (#774)

  2. Sleep handling improved resulting in fewer lengthy network timeouts

    Cornerstone now listens for sleep and wake notifications, canceling any running background network operations before the Mac goes to sleep.

    This prevents Subversion from experiencing lengthy network timeouts due to dropped connections. As a result Cornerstone will prompt to quit much less often during shutdown. (#1017)

  3. Kind column added to file browser views

    The working copy and repository file browser views have a new Kind column which displays descriptive text for the item’s type similar to that displayed in the Finder column of the same name.

    Beyond the informational value of the column, it also provides the added benefit of enabling the user to sort items by type. (#1027)

  4. Source revision can be specified when copying items within a working copy

    In previous versions of Cornerstone, copying items within a working copy always resulted in the working revision being copied (i.e. the copied item included any uncomitted changes).

    The copy options window was improved in 2.1 to allow the user to select the revision being copied. Possible revisions include the working revision (which is the default and behaves as in prior versions) as well as the BASE revision. This allows the user to copy a modified file without including uncommitted changes.

    The copy options window also allows an arbitrary revision to be specified as a date or number.

    Please note that copying an item’s BASE revision requires that the working copy is in Subversion 1.5 format (or newer).

  5. Depth can be specified when reverting

    The advanced revert function (Working Copy > Revert…) was extended to allow the user to specify the depth to revert to in the selected folders (this parameter has no effect if a file is selected).

    This is particularly useful for reverting changes to folder properties (e.g. externals) without reverting changes to files contained within the folder.

  6. The Compare View’s find bar supports standard find pasteboard

    Text selected for (or entered into) the Compare View’s find bar is published to other applications using the standard find pasteboard. Likewise, the contents of the find pasteboard are adopted by the find bar when Cornerstone is activated. (#1065)

  7. Improved Commit View

    A couple of minor improvements were made to the Commit View:

    • Include with Contents and Exclude with Contents were added to the change list’s right-click menu

      These function include/exclude the selected folder along with all contained items.

      Tree-based inclusion/exclusion of items in the change list has long been possible by Option-clicking items’ check boxes. Exposing these functions in the right-click menu will hopefully improve their discoverability.

    • Unchanged folders are now displayed differently in the change list

      The change list includes intermediary parent folders for modified items even when the folders themselves are unmodified. These unmodified folders are now displayed dimmed in order to differentiate them from folders with property modifications. (#903)

    • Tooltips are now displayed for columns in the change list

      Tooltips are now displayed for the action and property action columns, as well as for the inclusion/exclusion check box.

  8. Improved Timeline View

    A couple of minor improvements were made to the Timeline View:

    • Icons are displayed for items in the timeline

      File-type icons are now displayed for items listed in the timeline view.

    • Differences can be saved as a patch file

      The File > Save Differences as Patch… function (previously only available in the Compare and Browser Views) can now also be used in the Timeline View to save the differences in the compared files as a patch file. (#1089)

    • Directory selection message was improved

      The timeline’s compare view does not currently support the comparison of folders. The message displayed when a folder’s revision is selected was improved to make this clearer.

  9. Deselect All function was added to the Edit menu

    The Deselect All function can be used to clear the selection in the Browser Views as well as the Compare View and the Timeline View.

    The Deselect All function does not have a key equivalent. The two standard key equivalents found in Mac applications are Cmd+Option+A and Escape. We decided not to co-opt Cmd+Option+A as it is already in use for Select All Matches in the Browser View and Select All on Right Side in the Compare View. We did not implement the Escape key equivalent as the Escape key is reserved in Cornerstone for exiting the current navigation context. (#1057)

  10. Toggled view options menu items no longer display check marks for improved compliance with Apple’s HIG

    Prior to version 2.1, the menu items for Cornerstone’s view options (e.g. View > Show Ignored Items) displayed a check mark indicating whether the option was in effect.

    The combination of an imperative command (i.e. Show…) with a check mark to indicate the state of the option results in ambiguity: what effect does the function have when invoked when enabled. Does this Show the ignored items? Or does it uncheck the menu item, thus disabling the option? Apple therefore recommends against the use of menu items in this way.

    Cornerstone 2.1 improves compliance with the Apple HIG by replacing the check marks with dynamically-modified menu item text that unambiguously indicates the effect of the function. For example, View > Show Ignored Items is displayed as View > Hide Ignored Items when enabled.

    This change was implemented consistently for the following menu items:

    • View > Show Ignored Items
    • View > Show Repository Status
    • View > Show Contents of Externals
    • Compare > Show Differences in Whitespace
    • Compare > Show Differences in Line Endings
    • Compare > Show Line Differences
    • Compare > Show Annotations
    • Compare > Show Line Numbers
    • Compare > Show Invisibles
    • Compare > Show Image Information

    (#1079)

  11. Preferences added for Compare View options

    Four new preferences were added to the General preference pane enabling the user to specify default values for the following Compare View options:

    • Compare > Show Differences in Whitespace
    • Compare > Show Differences in Line Endings
    • Compare > Show Line Differences
    • Compare > Show Invisibles

    (#1062)

  12. Compare View now supports horizontal drag-scrolling

    The Compare View always supported vertical drag-scrolling. Auto-scrolling was improved for version 2.1 to support horizontal drag-scrolling when the mouse is dragged beyond the horizontal extents of the selected document. (#832)

  13. Compare Using External Tool function moved from File to Compare menu

    The Compare Using External Tool menu item (with sub-menu) was moved from the File menu to the Compare menu.

  14. Add to Working Copy with Contents item is always visible in Working Copy menu

    The Add to Working Copy with Contents menu item was previously only available in the Working Copy menu as an alternate (i.e. the item was only visible when the Shift key modifier was pressed).

    This behavior was changed for 2.1 — the menu item is now always visible — with the intention of improving the discoverability of the function.

  15. Update… menu item in working copy right-click menu is no longer visible by default

    The addition of the new Switch… function in the working copy right-click menu necessitated the pruning of redundant or seldom-used items.

    Previously, the right-click menu contained both the Update… and Update to Latest Revision items, so we decided that the Update… menu item should no longer be displayed by default.

    The Update… menu item is still available, but is now only displayed when the Shift key is pressed. Likewise, Revert… replaces Revert to Last Update… when the Shift key is pressed.

  16. Edit > Copy URLs menu alternate added for items in the Working Copy Browser View

    The new menu item (key equivalent Opt+Cmd+C) is displayed when the Option key is pressed. It copies the URLs for the selected items to the clipboard.

    The command is also available in an item’s right-click menu. The command is not visible by default but can be revealed by pressing the Option key.

  17. Improved display of repository location in inspector

    In previous versions of Cornerstone, the working copy item inspector displayed the URL of the selected item in a single, multiline field.

    The inspector was improved for version 2.1 to display the item’s location in two fields:

    1. Repository URL
    2. Location

    This results in better use of available horizontal space: the name of the selected item is not included in the URL, and the location (labeled Where) is displayed as a path relative to the repository.

    The full location URL is available in the field’s tooltip.

  18. Browser View search field now supports revision numbers

    The search field in the Browser Views (working copy and repository) now accepts revision numbers, allowing the user to search for all files committed in a particular revision.

  19. Most Recent filter added to Repository Browser View

    The new Most Recent (key equivalent Ctrl+R) filter shows only items which were changed in the displayed revision (normally HEAD). The filter’s title changes to This Revision when a revision other than HEAD is displayed.

  20. Refresh Automatically option was removed from the View menu

    The utility of the Refresh Automatically option decreased with improvements introduced with version 1.5 and in Cornerstone 2 only controlled whether a repository browser was refreshed after commits from a related working copy.

    The command was removed from the View menu to simplify the user interface and repository browsers now always refresh following commits from related working copies (as had previously been the default).

Compatibility

  1. Compatible with Mac OS X 10.5 Leopard and 10.6 Snow Leopard

    Cornerstone is compatible both with Mac OS X 10.5 Leopard and the more recent Mac OS X 10.6 Snow Leopard.

    Both Intel and PowerPC processors are supported on Leopard. Only Intel processors are supported on Snow Leopard.

Compatibility

Backwards Compatibility

Cornerstone 2.1 is fully backwards-compatible with 1.5 and 2.0. All configuration and settings are transparently migrated to version 2 when the new version is run for the first time.

Forwards Compatibility

The Cornerstone 2 configuration databases are forward-compatible with 1.5, i.e. you can run versions 1.5, 2.0 and 2.1 against the same configuration databases in your Application Support/Cornerstone folder.

Issues Resolved in Cornerstone 2.1

# Description
157 ‘Copy To…’ function needed in node browser views
427 Allow revision selection in repository browser view
483 User should be able to override file type UTIs to control how they are displayed in the compare view
520 Add switch function
774 Working copy URLs are not updated when a username is changed in the repository connection settings
832 Text compare view doesn’t support horizontal drag scrolling (i.e. autoscrolling)
886 Commit view’s change list statistics incorrectly includes unmodified folders
903 Icons for non-changed intermediate folders in the commit view’s change list should be displayed as partially transparent
925 Cornerstone should provide a function for undeleting/reanimating deleted files
1017 Sending Macbook to sleep with remote tasks running can cause lengthy timeouts while quitting application
1027 Add a ‘Kind’ column to the working copy and repository browsers
1057 Add a “Deselect All” function to the file browser views
1059 Descriptive text in the Export Files and Folders sheet is duplicated in “Additional Options” section
1061 Allow the user to increase the width of the ‘Description’ column in the merge ‘Change Preview’ view
1062 Store the values of the ‘Compare > Show Differences in Whitespace’ and ‘Compare > Show Differences in Line Endings’ settings between application sessions
1065 Add support for the system-wide find clipboard and inter-application searching
1068 Attempting to delete a folder in a locked working copy should raise an error and not fail silently
1073 Add a description of the ‘Clean’ command to Cornerstone’s Help Book documentation
1075 The ‘New Folder’ button in the File Import window is confusing and should be removed
1079 Toggled view option menu items (e.g. “Show Ignored Items”) should not display a check mark for consistency with Apple’s HIG
1084 The default text ‘Select one or more revisions from the timeline to compare’ when comparing folder revisions in the Timeline View is confusing. The text message should be improved
1085 Merges fail after choosing a “Merge from” URL using the open panel
1088 The “Help > Visit Cornerstone Web Site” application menu item does not work
1089 “File > Save Differences as Patch” is unavailable when comparing files in the Timeline view
1092 Selecting “Inspector” from the “Window” menu when the main window has been closed results in the inspector being displayed in a floating panel
1093 Activity spinner not shown in repository source list when displaying the contents of the repository for the first time
1094 Clicking the “Open” toolbar item in the compare view for deleted or missing files results in an error being displayed
1095 Change count capsules displayed in the working copy source list popover are not wide enough to accommodate 5-digit change counts
1096 The annotations popover appears when pressing the shift key when writing a log message (with a compare view with annotations)
1097 Clicking the “Update” button for a revision in the Log View ignores the value of the “Working Copy > Include Externals in Updates” setting and always updates externals
1100 The Timeline View can display an error if the user is mousing over a timeline when a refresh completes
1101 External folders are not always displayed with the [X] marker in the working copy browser view
1102 Hovering the mouse over the color column in the annotation legend window displays a tooltip with programming information about the color displayed. This should be removed
1105 Cornerstone raises an error when the font configured as the fixed-width font in the application’s preferences is missing
1107 Cornerstone encounters an unexpected error when searching for a term in the Compare View on a PowerPC Mac

Release Notes for 2.0.4

Filed under: Cornerstone,Release Notes — Administrator @ 6:44 am

2.0.4 is a maintenance release which solves issues uncovered since the release of 2.0.

2.0.4 is a recommended update for all users running 2.0.

Resolved Issues

# Description
- Fixed a couple of minor memory leaks
1024 Cornerstone should keep track of the user’s last selected file repository compatibility setting
1026 The revision indicator in the repository browser’s status bar is not wide enough to accommodate 7-figure revision numbers
1037 Revisions displayed for cherry picking should be filtered based on the value in the “Merge from” field instead of displaying all revisions in the repository
1042 Cornerstone occasionally displays an alert with the text “An unexpected error occurred” after enabling annotations in the compare view
1043 Clicking “Merge Changes” in the merge view should cancel the running merge preview activity
1048 Cornerstone displays an error when the left/right/both selector is clicked in the compare view’s find bar
1055 Cherry picking merge UI should not start dry run for preview until one or more revisions has been specified by the user
1063 Compare view displays an error (“Cannot convert from ZSVNMineRevision to svn_opt_revision_t”) after resolving a conflict
1067 The diff3-cmd helper tool configured in .subversion/config should not be displayed while performing dry run merge previews
1071 The ‘Check out to’ field in the externals editor does not support folder names containing whitespace
1072 The document state for the externals editor window is not marked as modified when the property text is directly edited by the user

Designing an Icon in Record Time

Filed under: Cornerstone — Lawrence @ 6:25 am

Or: How we spent 2 weeks on a single icon for Cornerstone 2.

The icons used in Cornerstone 2 were never originally conceived as a complete set but came into existence gradually, pretty much at the same time as the feature set itself. The brief to design an icon for the newly added Branching functionality came somewhat late in the day when it had to fit into an existing icon set which comprised of the Merge, Update and Commit icons.

Packages that Branch

Branching Packages

The first step was to try and reuse the blue and red package metaphor for ‘changes’ as originally used in the Update and Commit icons and apply it to the context of branching. The result was 2 packages connected by a metallic ‘branch’ or conduit, with one package of changes extending away or branching off from the other. Not too bad for a first attempt.


Although icon design is not a ‘one design fits all sizes’ exercise we could not, even with extensive tinkering, optimize the icon for 32px. We tried various configurations of the 2 packages with the blue package placed above then below the red package and vice-versa. We also tried altering the shadows and highlights but still couldn’t get the level of definition we needed. The conduit had to be completely unambiguous for the metaphor to work and in the end we couldn’t help feeling that with this approach we were trying too hard to push the package concept where it just didn’t belong.

An Idea too Far?

Package colored leaves

Another way to main a consistent style apart from reusing metaphors and drawing technique is of course through color scheme. Moving away from reusing the package metaphor we decided on a more direct approach and came up with the idea of using leaves and their natural association with branching.


The color scheme translated well, especially with the edge highlights from the Update, Commit and Branch icons being used for the leaves’ veins. In fact we thought it looked so good that we were convinced it was more or less the final draft.

It was only after some time that it began to vex us. In fact several months passed as we continued development on Cornerstone 2 before realizing that the leaves were just not going to cut it. We decided that using them to represent branches which in turn represented branch functionality was one conceptual leap too far. Not only that but the leaves lacked the perspective shared by the Update, Commit and Merge icons.

Wood for the Trees

How about using Branches to represent Branches?

Now this sounds really crazy but we thought we’d give it a go. We’d use the color and perspective from the Update, Commit and Branch icons and apply it to the most familiar branching metaphor we could think of: the branching of the stem of a plant. Again the colors of the leaves’ veins would be based on the highlight colors used in the leaf icon but be bolder and drawn to indicate a fatter, rounder  more succulent leaf, much like an aloe vera plant.


Even after extensive retouching we couldn’t get the veins of the leaves to scale well and we wanted more than the shape of the leaf to indicate it’s purpose. By designing a more stylized leaf whereby the rib of the leaf is sharply recessed and blends seamlessly with the stem  (via the petiole for you biology buffs) we were able to achieve the level of definition at 32px that we were looking for.


As you can see this required some touching up and additional highlights but we were really pleased with the end result.

Try, Try again

Lessons Learned

Clearly icon design is not always, but can be, a highly iterative process. It took us nearly 2 weeks to decide on the final draft and while we’re really happy with the end result, we struggled at times to come up with a satisfying image that we thought users would easily understand.

When designing an icon that has to fit into an existing set it pays to remember that reusing a metaphor is not the only way to achieve consistency. Color scheme, perspective and drawing style, used in the right proportions (together with a good dollop of perseverance) can be just as important.

Cornerstone 2 in Numbers

Filed under: Cornerstone — Simon @ 4:53 am

There are positives and negatives to developing a client for an established system like Subversion.

One of the negatives is that some people assume it doesn’t take much to develop a Subversion client and once in a while we receive mail suggesting that Cornerstone is expensive at $59.

After all, how difficult can it be? It’s just a Subversion client, right?

Anyone who has ever done serious UI development knows differently. Designing and implementing graphical user interfaces is challenging at the best of times but particularly so when you take a complex system like Subversion and try to make it accessible to both new users and Subversion veterans alike.

We recently took some time to reflect on Cornerstone 2 development, including how far we’ve come since both Cornerstone 1.5 in October 2009 and the initial release of Cornerstone 1.0 in July 2008. Part of this period of introspection involved gathering some data on the Cornerstone development process.

We think these numbers tell an interesting story. On the one hand they illustrate how demanding user interface development can be. But they also demonstrate just how much effort we invest into making Cornerstone as good as it can possibly be.

Build System

Cornerstone 2 is a 64-bit Cocoa application developed with Xcode. It is comprised of numerous bundles and frameworks, targeting a number of different CPU architectures and operating system versions.

Xcode Projects 19
Frameworks 15
Loadable Bundles 17
Helper Applications 1
CPU Architectures 3 (PPC, x86, x86_64)
Operating System Versions 2 (Mac OS X 10.5 & 10.6)
Build Time (Release Build) ~10 minutes

The above build time does not include the various versions of Subversion included with Cornerstone.

Source Code

Cornerstone is primarily written in Objective-C. It also contains a couple of C++ classes and a handful of C functions.

Here is a breakdown of the amount of code in Cornerstone:

Files 2,116
Lines of Code 181,000
Lines of Comments 91,000

These figures were generated using cloc. Third-party libraries and frameworks were not included. Unit tests were also not included.

Subversion by Comparison

We thought it would be interesting to compare these figures against Subversion itself. Subversion is written almost exclusively in C. The figures (excluding unit tests and language bindings) are:

Files 462
Lines of Code 180,000
Lines of Comments 65,000

These figures were taken from Subversion 1.6.12 and include the svn, svnadmin and svnsync command-line tools as well as the mod_dav_svn Apache module (but not the dependencies such as APR, Neon, Serf and SQLite etc.). SWIG language bindings (e.g. for Python) are also not included.

We thought these numbers are particularly interesting as they show that Cornerstone 2 contains roughly the same amount of code as Subversion itself.

Structural Details

We did some further analysis to determine how Cornerstone is structured. We knew that Cornerstone is a fairly large project, but the sheer number of structural elements (classes, methods etc.) surprised us nonetheless.

Objective-C Classes & Categories 1,037
Class Methods 1,261
Instance Methods 12,180
Average Methods per Class 12.9
Average Lines per Method 13.5

More than 1,000 classes with over 13,000 methods! That’s a lot of code!

Version Control Statistics

Here are some figures on the number of revisions committed to our development repository over various periods of the project.

Revisions Committed up to 1.0 3,358
Revisions Committed 1.0 – 1.1 1,406
Revisions Committed 1.1 – 1.5 2,265
Revisions Committed 1.5 – 2.0 2,189
Total Revisions Committed 9,218

Those 9,218 revisions were committed between February 2007 and October 2010. That makes an average of 48.5 revisions per week, or almost 10 revisions per weekday.

Summary

Cornerstone is a fairly large project. Not huge (we’ve worked on much bigger), but pretty substantial nonetheless.

We wanted to provide some numbers to quantify this and hope these figures provide some insight into the scale of development effort that goes into Cornerstone.