[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#683714: svn-workbench/1.6.6-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Hi,

 Please unblock svn-workbench package.
 As I already said(*), it is needed to introduce subversion1.7 to Wheezy.

 debdiff is here.

$ debdiff svn-workbench_1.6.6-1.dsc svn-workbench_1.6.6-2.dsc 
diff -u svn-workbench-1.6.6/debian/changelog svn-workbench-1.6.6/debian/changelog
--- svn-workbench-1.6.6/debian/changelog
+++ svn-workbench-1.6.6/debian/changelog
@@ -1,3 +1,9 @@
+svn-workbench (1.6.6-2) unstable; urgency=low
+
+  * upload to unstable 
+
+ -- Hideki Yamane <henrich@debian.org>  Thu, 02 Aug 2012 13:46:42 +0900
+
 svn-workbench (1.6.6-1) experimental; urgency=low



 and debdiff between testing and 1.6.6-1 is below.

 *) https://lists.debian.org/debian-release/2012/07/msg01524.html
------------------------------------------------------------------------------
Hi,

On Wed, 18 Jul 2012 21:22:01 +0200
Julien Cristau <jcristau@debian.org> wrote:
> > >  Have you tested the reverse dependencies with the new
> > > version (seems to be svn-workbench, svn-load, 	, ibid,
> > > w3af-console)?
> > 
> >  Not yet, honestly. 
> > 
> >  So, I should ask others to help this migration with upgraded pysvn
> >  by putting it to experimental once, then post "call for check" for
> >  their package. After that, I'll put pysvn to unstable and post unblock
> >  request to BTS.
> > 
> Sounds good to me.  Thanks!

 I've investigated pysvn related pacakge, Workbench needs update to new upstream
 version. Workbench 1.6.6 (released 4 Mar 2012) supports Subversion 1.7.3 and
 1.6.17. I want to put it to repository, so once to experimental.

 Note that, its debdiff is also huge - 5000 lines. 3300 lines are just changes with 
 copyright year, win32/MacOSX platform depended and internationalization (hu.po), 
 but 1700 lines remain. If you, release manager could say "Go" for it, I'll upload
 to unstable after few days.


Pros)
 - We can step forward to put subversion1.7 into Wheezy
 - If there's any regression for it, no other packages are affected.
   (No reverse dependency)
 - it released 3 month before freeze, and there's no issue after that, just I can
   see is on Windows issue http://pysvn.tigris.org/issues/show_bug.cgi?id=176
 - It reduces work for security/important update patch produce in the future
 - "about" menu doesn't work with current unstable version, but new 1.6.6
   works fine at least ;)

Cons)
 - You know, it violates basic freeze rule (and its diff 1700 lines at least)


Notes)
 - Workbench 1.6.6 with pysvn 1.7.6 looks good for me (with several minutes test).
   Now this package is orphaned, so I'll adopt this package and keep update and 
   fix it (to learn python app :).


-- 
Regards,

 Hideki Yamane     henrich @ debian.or.jp/org
 http://wiki.debian.org/HidekiYamane


diff -Nru svn-workbench-1.6.2/Source/make_pot_file.py svn-workbench-1.6.6/Source/make_pot_file.py
--- svn-workbench-1.6.2/Source/make_pot_file.py	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Source/make_pot_file.py	2011-11-06 23:19:48.000000000 +0900
@@ -12,7 +12,7 @@
     f.write( '%s\n' % py_file )
 f.close()
 
-rc = os.system( 'xgettext '
+cmd = ('xgettext '
     '--files-from=wb_files.tmp '
     '--default-domain=pysvn_workbench '
     '--output=I18N/pysvn_workbench.current.pot '
@@ -25,5 +25,8 @@
     '--no-wrap '
     '--width=2047 '
     '--add-comments=Translat '
-    '--language=Python' )
+    '--language=Python')
+
+print 'Info: %s' % (cmd,)
+rc = os.system( cmd )
 sys.exit( rc )
diff -Nru svn-workbench-1.6.2/Source/wb-diff.sh svn-workbench-1.6.6/Source/wb-diff.sh
--- svn-workbench-1.6.2/Source/wb-diff.sh	1970-01-01 09:00:00.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb-diff.sh	2011-11-05 22:50:19.000000000 +0900
@@ -0,0 +1,29 @@
+#!/bin/sh
+export PYSVN_WORKBENCH_STDOUT_LOG=$(tty)
+
+SOURCEDIR=$( dirname $0 )
+
+if [ "$PYTHONPATH" = "" ]
+then
+	export PYTHONPATH=${SOURCEDIR}
+else
+	export PYTHONPATH=${SOURCEDIR}:$PYTHONPATH
+fi
+
+PYTHON=${PYTHON:-python}
+BASENAME=$( basename ${PYTHON} )
+SUFFIX=${X#python*}
+DIRNAME=$( dirname ${PYTHON} )
+
+if [ "${DIRNAME}" != "" ]
+then
+    DIRNAME=${DIRNAME}/
+fi
+PYTHONW=${DIRNAME}pythonw${SUFFIX}
+
+if [ -e ${PYTHONW} ]
+then
+    ${PYTHONW} ${SOURCEDIR}/wb_diff_main.py $*
+else
+    ${PYTHON} ${SOURCEDIR}/wb_diff_main.py $*
+fi
diff -Nru svn-workbench-1.6.2/Source/wb.sh svn-workbench-1.6.6/Source/wb.sh
--- svn-workbench-1.6.2/Source/wb.sh	2006-10-25 06:51:49.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb.sh	2011-11-27 23:20:58.000000000 +0900
@@ -9,7 +9,7 @@
 
 PYTHON=${PYTHON:-python}
 BASENAME=$( basename ${PYTHON} )
-SUFFIX=${X#python*}
+SUFFIX=${BASENAME#python*}
 DIRNAME=$( dirname ${PYTHON} )
 
 if [ "${DIRNAME}" != "" ]
@@ -18,9 +18,14 @@
 fi
 PYTHONW=${DIRNAME}pythonw${SUFFIX}
 
+if [ -e /System/Library/CoreServices/SystemVersion.plist ]
+then
+    ARCH_CMD="arch -i386"
+fi
+
 if [ -e ${PYTHONW} ]
 then
-    ${PYTHONW} wb_main.py $*
+    ${ARCH_CMD} ${PYTHONW} wb_main.py $*
 else
-    ${PYTHON} wb_main.py $*
+    ${ARCH_CMD} ${PYTHON} wb_main.py $*
 fi
diff -Nru svn-workbench-1.6.2/Source/wb_app.py svn-workbench-1.6.6/Source/wb_app.py
--- svn-workbench-1.6.2/Source/wb_app.py	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_app.py	2012-07-25 06:31:59.000000000 +0900
@@ -663,6 +663,8 @@
     def emit( self, record ):
         try:
             msg = self.format(record) + '\n'
+            if type( msg ) == types.UnicodeType:
+                msg = msg.encode( 'utf-8' )
 
             sys.__stdout__.write( msg )
 
diff -Nru svn-workbench-1.6.2/Source/wb_dialogs.py svn-workbench-1.6.6/Source/wb_dialogs.py
--- svn-workbench-1.6.2/Source/wb_dialogs.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_dialogs.py	2010-12-31 02:50:13.000000000 +0900
@@ -14,6 +14,7 @@
 import os
 import pysvn
 import wb_subversion_utils
+import wb_platform_specific
 
 id_log_message_text = wx.NewId()
 id_last_log_message = wx.NewId()
@@ -123,7 +124,7 @@
         self.last_log_message_text = None
         if self.message_filename is not None:
             try:
-                self.last_log_message_text = file( self.message_filename, 'r' ).read().decode('utf-8').strip()
+                self.last_log_message_text = wb_platform_specific.uOpen( self.message_filename, 'r' ).read().decode('utf-8').strip()
             except EnvironmentError:
                 self.last_log_message_text = ''
 
@@ -150,7 +151,7 @@
     def OnOk( self, event ):
         self.EndModal( wx.ID_OK )
         try:
-            file( self.message_filename, 'w' ).write( self.getLogMessage().encode('utf-8') )
+            wb_platform_specific.uOpen( self.message_filename, 'w' ).write( self.getLogMessage().encode('utf-8') )
         except (IOError,OSError):
             pass
 
diff -Nru svn-workbench-1.6.2/Source/wb_frame.py svn-workbench-1.6.6/Source/wb_frame.py
--- svn-workbench-1.6.2/Source/wb_frame.py	2009-10-11 23:04:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_frame.py	2011-11-27 22:43:10.000000000 +0900
@@ -27,6 +27,7 @@
 import wb_platform_specific
 import wb_bookmarks_dialogs
 import wb_toolbars
+import wb_subversion_utils
 
 import wb_config
 
@@ -118,6 +119,9 @@
         self.menu_actions.Append( wb_ids.id_SP_Revert, T_('Revert...'), T_('Revert') )
         self.menu_actions.AppendSeparator()
         self.menu_actions.Append( wb_ids.id_SP_Cleanup, T_('Clean up'), T_('Clean up working copy') )
+        if wb_subversion_utils.version_info.has_upgrade:
+            self.menu_actions.AppendSeparator()
+            self.menu_actions.Append( wb_ids.id_SP_Upgrade, T_('Upgrade'), T_('Upgrade working copy') )
         self.menu_actions.AppendSeparator()
         self.menu_actions.Append( wb_ids.id_SP_CreateTag, T_('Create Tag...'), T_('Create Tag') )
         self.menu_actions.Append( wb_ids.id_SP_CreateBranch, T_('Create Branch...'), T_('Create Branch') )
@@ -345,6 +349,10 @@
         wx.EVT_MENU( self, wb_ids.id_SP_UpdateTo, self.app.eventWrapper( self.OnSpUpdateTo ) )
         wx.EVT_UPDATE_UI( self, wb_ids.id_SP_UpdateTo, self.app.eventWrapper( self.OnUpdateUiSpUpdateTo ) )
 
+        if wb_subversion_utils.version_info.has_upgrade:
+            wx.EVT_MENU( self, wb_ids.id_SP_Upgrade, self.app.eventWrapper( self.OnSpUpgrade ) )
+            wx.EVT_UPDATE_UI( self, wb_ids.id_SP_Upgrade, self.app.eventWrapper( self.OnUpdateUiSpUpgrade ) )
+
         wx.EVT_MENU( self, wb_ids.id_SP_Report_Updates, self.app.eventWrapper( self.OnSpReportUpdates ) )
         wx.EVT_UPDATE_UI( self, wb_ids.id_SP_Report_Updates, self.app.eventWrapper( self.OnUpdateUiSpReportUpdates ) )
         wx.EVT_MENU( self, wb_ids.id_SP_Report_LocksWc, self.app.eventWrapper( self.OnSpReportLocksWc ) )
@@ -462,13 +470,17 @@
         ver_str = ('%d.%d.%d-%d\n' %
                     (wb_version.major, wb_version.minor,
                      wb_version.patch, wb_version.build))
-        str_message =    ((T_('Work Bench version: %s') % ver_str) +
-                '\n' + wb_source_control_providers.getProviderAboutStrings() +
-                '\nwxPython %d.%d.%d.%d %s' % wx.VERSION +
-                '\nPython %d.%d.%d %s %d\n' % sys.version_info +
-                T_('\nCopyright Barry Scott (c) 2003-2009. All rights reserved')
-                )
-        wx.LogMessage( str_message )
+        str_message_parts = [T_('Work Bench version: %s') % ver_str
+                            ,wb_source_control_providers.getProviderAboutStrings()
+                            ,'wxPython %d.%d.%d.%d %s' % wx.VERSION
+                            ,'Python %d.%d.%d %s %d\n' % (sys.version_info[0]
+                                                         ,sys.version_info[1]
+                                                         ,sys.version_info[2]
+                                                         ,sys.version_info[3]
+                                                         ,sys.version_info[4])
+
+                            ,T_('\nCopyright Barry Scott (c) 2003-2011. All rights reserved')]
+        wx.LogMessage( '\n'.join( str_message_parts ) )
 
     def OnCmdPreferences( self, event ):
         pref_dialog = wb_preferences_dialog.PreferencesDialog( self, self.app )
@@ -770,7 +782,8 @@
 
     def OnUpdateUiSpAnnotate( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned and (not self.ui_state_focus.is_folder) )
@@ -780,7 +793,8 @@
 
     def OnUpdateUiSpCheckin( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.need_checkin
@@ -872,7 +886,8 @@
 
     def OnUpdateUiSpDiffWorkHead( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             if self.ui_state_list is self.ui_state_focus:
@@ -888,14 +903,16 @@
 
     def OnUpdateUiSpDiffWorkBranchOriginBase( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_list.versioned and not self.ui_state_list.new_versioned )
 
     def OnUpdateUiSpDiffWorkBranchOriginHead( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_list.versioned and not self.ui_state_list.new_versioned )
@@ -907,7 +924,8 @@
         self.getUpdateUiState()
         if wb_config.debug_selection_update: print 'ZF: OnUpdateUiSpHistory versioned %r handler %r' % (
                                                 self.ui_state_focus.versioned, self.event_handler)
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned and not self.ui_state_focus.new_versioned )
@@ -917,7 +935,8 @@
 
     def OnUpdateUiSpInfo( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned )
@@ -949,7 +968,8 @@
 
     def OnUpdateUiSpProperties( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned )
@@ -1001,7 +1021,8 @@
 
     def OnUpdateUiSpRevert( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.revertable )
@@ -1019,7 +1040,8 @@
     def OnUpdateUiSpUpdate( self, event ):
         self.getUpdateUiState()
 
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
 
         elif self.ui_state_focus.is_project_parent:
@@ -1041,6 +1063,16 @@
     def OnUpdateUiSpUpdateTo( self, event ):
         self.OnUpdateUiSpUpdate(event)
 
+    def OnSpUpgrade( self, event ):
+        self.clearUpdateUiState()
+        return self.tree_panel.OnSpUpgrade()
+
+    def OnUpdateUiSpUpgrade( self, event ):
+        self.getUpdateUiState()
+
+        # this is a tree only command
+        event.Enable( self.list_panel.list_handler.project_info.need_upgrade )
+
     #----------------------------------------
     def Sp_Dispatch( self, sp_func_name ):
         self.clearUpdateUiState()
@@ -1102,7 +1134,7 @@
         self.text_ctrl = StyledLogCtrl( self.app, self )
 
         # Redirect the console IO to this panel
-        sys.stdin = file( wb_platform_specific.getNullDevice(), 'r' )
+        sys.stdin = wb_platform_specific.uOpen( wb_platform_specific.getNullDevice(), 'r' )
         if self.app.isStdIoRedirect():
             sys.stdout = self
             sys.stderr = self
diff -Nru svn-workbench-1.6.2/Source/wb_ids.py svn-workbench-1.6.6/Source/wb_ids.py
--- svn-workbench-1.6.2/Source/wb_ids.py	2009-03-08 03:25:46.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_ids.py	2011-11-21 01:52:09.000000000 +0900
@@ -75,6 +75,7 @@
 id_SP_Unlock = wx.NewId()
 id_SP_Update = wx.NewId()
 id_SP_UpdateTo = wx.NewId()
+id_SP_Upgrade = wx.NewId()
 id_SP_CreateTag = wx.NewId()
 id_SP_CreateBranch = wx.NewId()
 
diff -Nru svn-workbench-1.6.2/Source/wb_list_panel_common.py svn-workbench-1.6.6/Source/wb_list_panel_common.py
--- svn-workbench-1.6.2/Source/wb_list_panel_common.py	2009-10-12 01:25:29.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_list_panel_common.py	2011-11-21 01:52:09.000000000 +0900
@@ -21,6 +21,7 @@
 import wb_ids
 import wb_shell_commands
 import wb_dialogs
+import wb_platform_specific
 
 class ListSortData:
     def __init__( self, order=1, field=0 ):
@@ -54,6 +55,7 @@
         self.unversioned = False
         self.need_checkin = False
         self.need_checkout = False
+        self.need_upgrade = False
         self.conflict = False
         self.file_exists = False
         self.is_folder = False
@@ -328,7 +330,7 @@
             if self.list_handler.mayOpen( row ):
                 self.app.selectTreeNode( filename )
 
-            elif not os.path.isdir( filename ):
+            elif not wb_platform_specific.uPathIsdir( filename ):
                 wb_shell_commands.EditFile( self.app, self.list_handler.getProjectInfo(), filename )
 
     def isTreeHandler( self ):
diff -Nru svn-workbench-1.6.2/Source/wb_main.py svn-workbench-1.6.6/Source/wb_main.py
--- svn-workbench-1.6.2/Source/wb_main.py	2009-10-04 20:50:50.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_main.py	2012-03-04 05:14:15.000000000 +0900
@@ -27,7 +27,7 @@
 or (sys.platform == 'darwin' and '--noredirect' not in sys.argv) ):
     stdout_filename = os.environ.get( 'PYSVN_WORKBENCH_STDOUT_LOG', '/tmp/workbench.tmp' )
 
-elif sys.platform.startswith( 'win' ):
+elif sys.platform.startswith( 'win' ) and '--noredirect' not in sys.argv:
     stdout_filename = os.path.join( os.environ[ 'TEMP' ], 'workbench.tmp' )
 
 if stdout_filename is not None:
diff -Nru svn-workbench-1.6.2/Source/wb_platform_unix_specific.py svn-workbench-1.6.6/Source/wb_platform_unix_specific.py
--- svn-workbench-1.6.2/Source/wb_platform_unix_specific.py	2007-12-01 16:13:47.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_platform_unix_specific.py	2011-01-05 20:46:33.000000000 +0900
@@ -13,6 +13,7 @@
 
 '''
 import os
+import types
 
 def getApplicationDir():
     return os.path.join( os.environ['HOME'], '.WorkBench' )
@@ -22,3 +23,48 @@
 
 def getNullDevice():
     return '/dev/null'
+
+def uPathExists( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.exists( path )
+
+def uPathIsdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.isdir( path )
+
+def uAccess( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.access( path, mode )
+
+def uRemove( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.remove( path )
+
+def uRename( path1, path2 ):
+    if type(path1) == types.UnicodeType:
+        path1 = path1.encode( 'utf-8' )
+
+    if type(path2) == types.UnicodeType:
+        path2 = path2.encode( 'utf-8' )
+
+    return os.rename( path1, path2 )
+
+def uOpen( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return open( path, mode )
+
+def uChdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.chdir( path )
diff -Nru svn-workbench-1.6.2/Source/wb_preferences.py svn-workbench-1.6.6/Source/wb_preferences.py
--- svn-workbench-1.6.2/Source/wb_preferences.py	2009-10-11 23:04:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_preferences.py	2010-12-31 02:50:13.000000000 +0900
@@ -105,14 +105,14 @@
             new_name = self.pref_filename + '.tmp'
             old_name = self.pref_filename + '.old'
 
-            f = file( new_name, 'w' )
+            f = wb_platform_specific.uOpen( new_name, 'w' )
             self.pref_data.write( f )
             f.close()
-            if os.path.exists( self.pref_filename ):
-                if os.path.exists( old_name ): # os.rename does not delete automatically on Windows.
-                    os.remove( old_name )
-                os.rename( self.pref_filename, old_name )
-            os.rename( new_name, self.pref_filename )
+            if wb_platform_specific.uPathExists( self.pref_filename ):
+                if wb_platform_specific.uPathExists( old_name ): # os.rename does not delete automatically on Windows.
+                    wb_platform_specific.uRemove( old_name )
+                wb_platform_specific.uRename( self.pref_filename, old_name )
+            wb_platform_specific.uRename( new_name, self.pref_filename )
 
             self.app.log.info( T_('Wrote preferences to %s') % self.pref_filename )
 
@@ -123,7 +123,7 @@
     def __init__( self, log, xml_pref_filename, ini_pref_filename ):
         self.all_sections = {}
 
-        if os.path.exists( xml_pref_filename ):
+        if wb_platform_specific.uPathExists( xml_pref_filename ):
             log.info( T_('Reading preferences from %s') % xml_pref_filename )
             self.__readXml( xml_pref_filename )
         else:
@@ -132,7 +132,7 @@
 
     def __readXml( self, xml_pref_filename ):
         try:
-            f = file( xml_pref_filename, 'r' )
+            f = wb_platform_specific.uOpen( xml_pref_filename, 'r' )
             text = f.read()
             f.close()
 
diff -Nru svn-workbench-1.6.2/Source/wb_preferences_dialog.py svn-workbench-1.6.6/Source/wb_preferences_dialog.py
--- svn-workbench-1.6.2/Source/wb_preferences_dialog.py	2009-10-03 19:22:02.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_preferences_dialog.py	2010-12-31 02:50:13.000000000 +0900
@@ -18,6 +18,7 @@
 import wb_dialogs
 import wb_tree_panel
 import wb_toolbars
+import wb_platform_specific
 
 class PreferencesDialog( wx.Dialog ):
     def __init__( self, parent, app ):
@@ -168,14 +169,14 @@
         # otherwise it must exist
         valid = False
         if wx.Platform == '__WXMAC__':
-            valid = (os.access( self.text_ctrl_editor.GetValue(), os.X_OK )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uAccess( self.text_ctrl_editor.GetValue(), os.X_OK )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
         elif wx.Platform == '__WXMSW__':
-            valid = (os.path.exists( self.text_ctrl_editor.GetValue() )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uPathExists( self.text_ctrl_editor.GetValue() )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
         else:
-            valid = (os.access( self.text_ctrl_editor.GetValue(), os.X_OK )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uAccess( self.text_ctrl_editor.GetValue(), os.X_OK )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
 
         if not valid:
             wx.MessageBox(
diff -Nru svn-workbench-1.6.2/Source/wb_project_dialogs.py svn-workbench-1.6.6/Source/wb_project_dialogs.py
--- svn-workbench-1.6.2/Source/wb_project_dialogs.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_project_dialogs.py	2010-12-31 02:50:13.000000000 +0900
@@ -12,7 +12,10 @@
 '''
 import wx
 import wx.wizard
+
 import wb_source_control_providers
+import wb_platform_specific
+
 import pysvn
 import os
 
@@ -143,7 +146,7 @@
         wc_path = os.path.expanduser( self.wc_path_ctrl.GetValue().strip() )
 
         url = None
-        if os.path.exists( wc_path ):
+        if wb_platform_specific.uPathExists( wc_path ):
             try:
                 info = self.client.info( wc_path )
                 url = info.url
@@ -508,14 +511,14 @@
         state.wc_path = os.path.abspath( os.path.expanduser( self.wc_path_ctrl.GetValue().strip() ) )
         state.url_path = self.url_ctrl.GetLabel().strip()
 
-        if not os.path.exists( state.wc_path ):
+        if not wb_platform_specific.uPathExists( state.wc_path ):
             wx.MessageBox( T_('Path %s\n'
                     'Does not exist\n'
                     'Choose an existing subversion working copy directory')
                     % state.wc_path, style=wx.OK|wx.ICON_ERROR );
             return False
 
-        if not os.path.isdir( state.wc_path ):
+        if not wb_platform_specific.uPathIsdir( state.wc_path ):
             wx.MessageBox( T_('Path %s\n'
                     'Is not a directory\n'
                     'Choose an existing subversion working copy directory')
@@ -557,7 +560,7 @@
         wc_path = os.path.expanduser( wc_path )
 
         url = None
-        if os.path.exists( wc_path ):
+        if wb_platform_specific.uPathExists( wc_path ):
             try:
                 info = self.parent.client_pi.client_fg.info( wc_path )
                 url = info.url
@@ -665,8 +668,8 @@
                     style=wx.OK|wx.ICON_ERROR );
             return False
 
-        if os.path.exists( state.wc_path ):
-            if not os.path.isdir( state.wc_path ):
+        if wb_platform_specific.uPathExists( state.wc_path ):
+            if not wb_platform_specific.uPathIsdir( state.wc_path ):
                 wx.MessageBox( T_('Path %s\n'
                         'Is not a directory\n'
                         'Choose a directory that is empty and not in use by subversion')
diff -Nru svn-workbench-1.6.2/Source/wb_read_file.py svn-workbench-1.6.6/Source/wb_read_file.py
--- svn-workbench-1.6.2/Source/wb_read_file.py	2007-04-07 17:51:00.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_read_file.py	2010-12-31 02:50:13.000000000 +0900
@@ -13,8 +13,10 @@
 import locale
 import codecs
 
+import wb_platform_specific
+
 def readFileContentsAsUnicode( filename ):
-    f = file( filename, 'r' )
+    f = wb_platform_specific.uOpen( filename, 'r' )
     contents = f.read()
     f.close()
 
@@ -37,15 +39,22 @@
     if( len(contents) > len(codecs.BOM_UTF8)
     and contents[0:len(codecs.BOM_UTF8)] == codecs.BOM_UTF8 ):
         encoding = 'utf-8'
+
     elif( len(contents) > len(codecs.BOM_UTF16_LE)
     and contents[0:len(codecs.BOM_UTF16_LE)] in [codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE]):
         encoding = 'utf-16'
+
     elif( len(contents) > len(codecs.BOM_UTF32_LE)
     and contents[0:len(codecs.BOM_UTF32_LE)] in [codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE]):
         encoding = 'utf-32'
+
     else:
         encoding = locale.getdefaultlocale()[1]
 
+        # Mac says mac-roman when utf-8 is what is required
+        if encoding == 'mac-roman':
+            encoding = 'utf-8'
+
     if encoding is None:
         encoding = 'iso8859-1'
 
diff -Nru svn-workbench-1.6.2/Source/wb_shell_unix_commands.py svn-workbench-1.6.6/Source/wb_shell_unix_commands.py
--- svn-workbench-1.6.2/Source/wb_shell_unix_commands.py	2009-10-11 22:00:29.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_shell_unix_commands.py	2011-01-05 03:50:40.000000000 +0900
@@ -13,11 +13,14 @@
 import os
 import signal
 import subprocess
+import types
+
+import wb_platform_specific
 
 __sigchld_handler_installed = False
 
 gui_terminals = ['gnome-terminal', 'konsole', 'xterm', 'xfce4-terminal']
-gui_file_browsers = ['nautilus', 'konqueror', 'thunar']
+gui_file_browsers = ['nautilus', 'konqueror', 'thunar', 'dolphin']
 
 def getTerminalProgramList():
     return gui_terminals[:]
@@ -41,20 +44,20 @@
 
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
         __run_command( app, editor_image, editor_args )
 
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def ShellOpen( app, project_info, filename ):
     app.log.info( T_('Open %s') % filename )
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
-        os.system( "gnome-open '%s'" % filename )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
+        os.system( "xdg-open '%s'" % filename )
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def GuiDiffFiles( app, options ):
     cmd_line = "'%s' %s &" % (app.prefs.getDiffTool().gui_diff_tool, options)
@@ -79,7 +82,7 @@
         title.append( pi.project_name )
         pi = pi.parent
 
-    f  = open( shell_script_filename, 'w' )
+    f  = wb_platform_specific.uOpen( shell_script_filename, 'w' )
     f.write( 'export WB_WD="%s"\n' % working_dir )
     f.write( 'cd "%s"\n' % working_dir )
 
@@ -105,10 +108,12 @@
 
     if terminal_program == 'konsole':
         __run_command( app, terminal_program,
-            ['-T',  ' '.join( title ), '--workdir', working_dir, '-e', shell_script_filename] )
+            ['--title',  ' '.join( title ), '--workdir', working_dir, '-e', '/bin/sh', shell_script_filename] )
+
     elif terminal_program in ('gnome-terminal', 'xfce4-terminal'):
         __run_command( app, terminal_program,
             ['--title',  ' '.join( title ), '--working-directory', working_dir, '-x', shell_script_filename] )
+
     elif terminal_program == 'xterm':
         __run_command( app, terminal_program,
             ['-T',  ' '.join( title ), '-e', shell_script_filename] )
@@ -130,9 +135,10 @@
     if not found:
         return
 
-    if browser_program == 'konsole':
+    if browser_program == 'konqueror':
         __run_command( app, browser_program, ['--mimetype', 'inode/directory', project_info.getWorkingDir()] )
-    elif browser_program in ('nautilus', 'thunar'):
+
+    elif browser_program in ('nautilus', 'thunar', 'dolphin'):
         __run_command( app, browser_program, [project_info.getWorkingDir()] )
 
 def __run_command( app, cmd, args ):
@@ -158,8 +164,17 @@
         signal.signal( signal.SIGCHLD, __sigchld_handler )
         __sigchld_handler_installed = True
 
+    cmd = asUtf8( cmd )
+    args = [asUtf8( arg ) for arg in args]
+
     os.spawnvpe( os.P_NOWAIT, cmd, [cmd]+args, env )
 
+def asUtf8( s ):
+    if type( s ) == types.UnicodeType:
+        return s.encode( 'utf-8' )
+    else:
+        return s
+
 def __sigchld_handler( signum, frame ):
     try:
         while True:
diff -Nru svn-workbench-1.6.2/Source/wb_show_diff_frame.py svn-workbench-1.6.6/Source/wb_show_diff_frame.py
--- svn-workbench-1.6.2/Source/wb_show_diff_frame.py	2009-10-12 01:36:44.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_show_diff_frame.py	2010-12-31 02:50:13.000000000 +0900
@@ -23,6 +23,10 @@
 
         # fix up line endings CRLF to LF and CR to LF
         text = raw_text.replace( '\r\n', '\n' ).replace( '\r', '\n' )
+        try:
+            text = text.decode( 'utf-8' )
+        except ValueError:
+            pass
 
         diff_prefs = app.prefs.getDiffWindow()
 
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_checkin.py svn-workbench-1.6.6/Source/wb_subversion_checkin.py
--- svn-workbench-1.6.2/Source/wb_subversion_checkin.py	2009-10-03 17:21:08.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_checkin.py	2011-11-21 01:52:09.000000000 +0900
@@ -30,7 +30,7 @@
 
 class CheckinFrame(wx.Frame):
     def __init__( self, app, project_info, all_files ):
-        wx.Frame.__init__( self, None, -1, T_('Check in for %s') % project_info.wc_path, size=(700,500) )
+        wx.Frame.__init__( self, None, -1, T_('Check in for %s') % project_info.wc_path, size=(1000,500) )
 
         self.app = app
 
@@ -110,7 +110,7 @@
         self.last_log_message_text = None
 
         try:
-            f = file( self.message_filename, 'r' )
+            f = wb_platform_specific.uOpen( self.message_filename, 'r' )
             self.last_log_message_text = f.read().decode('utf-8').strip()
             f.close()
         except EnvironmentError:
@@ -232,7 +232,7 @@
 
         message = self.log_message_ctrl.GetValue().encode('utf-8')
         try:
-            f = file( self.message_filename, 'w' )
+            f = wb_platform_specific.uOpen( self.message_filename, 'w' )
             f.write( message )
             f.close()
         except EnvironmentError:
@@ -329,7 +329,10 @@
 
         self.all_excluded_files = {}
         self.__parent = parent
-        
+
+    def overrideColumnInfo( self ):
+        self.column_info.setColumnWidth( 'Name', self.column_info.getColumnWidth( 'Name' ) + 20 )
+
     def getContextMenu( self ):
         menu_template = [
             ('', wb_ids.id_File_Edit, T_('Edit') )
@@ -398,7 +401,7 @@
 
         # Set the project files to be this new list
         self.project_info.all_files = all_files
-            
+
 class CheckinProjectInfo:
     def __init__( self, project_info, all_files ):
         self.all_files = all_files
@@ -407,6 +410,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_diff.py svn-workbench-1.6.6/Source/wb_subversion_diff.py
--- svn-workbench-1.6.2/Source/wb_subversion_diff.py	2009-04-13 19:35:09.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_diff.py	2010-12-31 02:50:13.000000000 +0900
@@ -20,6 +20,7 @@
 import wb_show_diff_frame
 import wb_read_file
 import wb_diff_frame
+import wb_platform_specific
 
 debug_diff = False
 
@@ -93,18 +94,18 @@
     for path_info in (old_path_info, new_path_info):
         if( path_info.revision is None
         or path_info.revision.kind == pysvn.opt_revision_kind.working ):
-            if not os.path.exists( path_info.path ):
+            if not wb_platform_specific.uPathExists( path_info.path ):
                 app.log_error( '"%s" does not exist.' % path_info.path )
                 fd, path_info.path = tempfile.mkstemp( suffix=os.path.basename( path_info.path ) )
                 os.close( fd )
                 # keep track of the temp file
                 app.all_temp_files.append( path_info.path )
 
-            if os.path.isdir( path_info.path ):
+            if wb_platform_specific.uPathIsdir( path_info.path ):
                 app.log_error( '"%s" refers to a directory.' % path_info.path )
                 return
 
-            if not os.access( path_info.path, os.R_OK ):
+            if not wb_platform_specific.uAccess( path_info.path, os.R_OK ):
                 app.log_error( '"%s" cannot be read.' % path_info.path )
                 return
 
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_history.py svn-workbench-1.6.6/Source/wb_subversion_history.py
--- svn-workbench-1.6.2/Source/wb_subversion_history.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_history.py	2011-01-05 03:50:40.000000000 +0900
@@ -17,6 +17,7 @@
 import os
 import time
 import types
+import urllib
 
 import pysvn
 
@@ -53,7 +54,10 @@
         self.author = author
         self.date = date
         self.label = label
-        self.message = message
+        try:
+            self.message = message.decode( 'utf-8' )
+        except ValueError:
+            self.message = message
         self.changed_paths = changed_paths
 
         self.changed_paths.sort( self.by_changed_path )
@@ -70,14 +74,22 @@
 
         if filter_field == T_('Author'):
             return filter_text.lower() in self.author.lower()
+
         elif filter_field == T_('Comment'):
             return filter_text.lower() in self.message.lower()
+
         elif filter_field == T_('Path'):
             for changed_path in self.changed_paths:
-                if filter_text.lower() in changed_path.path.lower():
+                try:
+                    c_p_p = changed_path.path.decode('utf-8')
+                except ValueError:
+                    c_p_p = changed_path.path
+
+                if filter_text.lower() in c_p_p.lower():
                     return True
 
             return False
+
         else:
             assert( False )
             return False
@@ -101,7 +113,8 @@
     if len( all_log_entries ) == 0:
         return info.URL, all_history_entries
 
-    repos_path = info.URL[len(info.repos_root_URL):]
+    repos_path = urllib.unquote( info.URL[len(info.repos_root_URL):].encode( 'utf-8' ) )
+
     for log in all_log_entries:
         # author is optional
         if 'author' not in log:
@@ -110,7 +123,7 @@
         all_history_entries.append(
             LogEntry(
                 log.revision.number,
-                info.repos_root_URL+repos_path,
+                info.URL,
                 log.author,
                 log.date,
                 '',
@@ -119,7 +132,11 @@
 
         for changed_path in log.changed_paths:
             if changed_path.action in ['A','M']:
-                if repos_path == changed_path.path:
+                if changed_path.path is not None:
+                    c_p_p = changed_path.path.decode( 'utf-8' )
+                else:
+                    c_p_p = None
+                if repos_path == c_p_p:
                     if changed_path.copyfrom_path is not None:
                         repos_path = changed_path.copyfrom_path
                     break
@@ -484,7 +501,7 @@
         # Arrange the panels with the splitter windows
         self.splitter.AppendWindow( self.panel_history, 250 )
         self.splitter.AppendWindow( self.panel_comment, 100 )
-        self.splitter.AppendWindow( self.panel_changed_paths, 150 )
+        self.splitter.AppendWindow( self.panel_changed_paths, 200 )
 
         self.selected_revisions = {}
 
@@ -508,7 +525,7 @@
         char_width = 9
         self.list_ctrl.SetColumnWidth( self.col_revision, 7*char_width )
         self.list_ctrl.SetColumnWidth( self.col_author, 14*char_width )
-        self.list_ctrl.SetColumnWidth( self.col_date, 15*char_width )
+        self.list_ctrl.SetColumnWidth( self.col_date, 18*char_width )
         self.list_ctrl.SetColumnWidth( self.col_label, 12*char_width )
         self.list_ctrl.SetColumnWidth( self.col_message, 40*char_width )
 
@@ -525,9 +542,9 @@
 
         char_width = 9
         self.paths_ctrl.SetColumnWidth( self.col_action, 7*char_width )
-        self.paths_ctrl.SetColumnWidth( self.col_path, 40*char_width )
+        self.paths_ctrl.SetColumnWidth( self.col_path, 60*char_width )
         self.paths_ctrl.SetColumnWidth( self.col_copyfrom_revision, 6*char_width )
-        self.paths_ctrl.SetColumnWidth( self.col_copyfrom_path, 40*char_width )
+        self.paths_ctrl.SetColumnWidth( self.col_copyfrom_path, 60*char_width )
 
         self.initButtons( self.v_sizer_history )
 
@@ -686,7 +703,7 @@
             self.paths_ctrl.InsertStringItem( index,
                 action_map.get( info.action, info.action ) )
             self.paths_ctrl.SetStringItem( index, self.col_path,
-                info.path )
+                info.path.decode( 'utf-8' ) )
             if info.copyfrom_path is not None:
                 self.paths_ctrl.SetStringItem( index, self.col_copyfrom_revision,
                     str( info.copyfrom_revision.number ) )
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_list_handler.py svn-workbench-1.6.6/Source/wb_subversion_list_handler.py
--- svn-workbench-1.6.2/Source/wb_subversion_list_handler.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_list_handler.py	2011-11-21 01:52:09.000000000 +0900
@@ -25,6 +25,7 @@
 import wb_clipboard
 import wb_diff_frame
 import wb_dialogs
+import wb_platform_specific
 
 class SubversionListHandler(wb_subversion_list_handler_common.SubversionListHandlerCommon):
     def __init__( self, app, list_panel, project_info ):
@@ -34,9 +35,14 @@
         return '<SubversionListHandler %r>' % self.project_info
 
     def getContextMenu( self ):
-        if self.project_info.need_checkout:
+        if self.project_info.need_upgrade:
+            menu_template = \
+                [('', wb_ids.id_SP_Upgrade, T_('Upgrade') )]
+
+        elif self.project_info.need_checkout:
             menu_template = \
                 [('', wb_ids.id_SP_Checkout, T_('Checkout') )]
+
         else:
             menu_template = \
                 [('', wb_ids.id_File_Edit, T_('Edit') )]
@@ -117,7 +123,7 @@
         all_status = []
         try:
             for filename in paste_data.getAllFilenames():
-                if os.path.isdir( filename ):
+                if wb_platform_specific.uPathIsdir( filename ):
                     dir_status = self.project_info.client_bg.status( os.path.dirname( filename ), recurse=False )
                     all_status.extend( [s for s in dir_status if s.path == filename] )
                 else:
@@ -149,7 +155,7 @@
             else:
                 rename_title = T_('Rename')
 
-            while os.path.exists( new_filename ):
+            while wb_platform_specific.uPathExists( new_filename ):
                 new_name, force = self.app.renameFile( rename_title, os.path.basename( old_filename ), None )
                 if new_name is None:
                     return
@@ -168,7 +174,7 @@
 
             try:
                 if paste_data.isCopy():
-                    if os.path.isdir( old_filename ):
+                    if wb_platform_specific.uPathIsdir( old_filename ):
                         if is_controlled:
                             self.project_info.client_bg.copy( old_filename, new_filename )
                         else:
@@ -179,11 +185,11 @@
 
                     ok = True
                 else:
-                    if os.path.isdir( old_filename ):
+                    if wb_platform_specific.uPathIsdir( old_filename ):
                         if is_controlled:
                             self.project_info.client_bg.move( old_filename, new_filename, force=force )
                         else:
-                            os.rename( old_filename, new_filename )
+                            wb_platform_specific.uRename( old_filename, new_filename )
                     else:
                         text_status = self.getTextStatus( status )
                         prop_status = self.getPropStatus( status )
@@ -249,7 +255,7 @@
                 if is_controlled:
                     if text_status == pysvn.wc_status_kind.added:
                         self.project_info.client_fg.revert( filename )
-                        os.remove( filename )
+                        wb_platform_specific.uRemove( filename )
 
                     elif( text_status == pysvn.wc_status_kind.modified
                     or prop_status == pysvn.wc_status_kind.modified ):
@@ -260,7 +266,7 @@
                         self.project_info.client_fg.remove( filename )
 
                 else:
-                    os.remove( filename )
+                    wb_platform_specific.uRemove( filename )
 
             except pysvn.ClientError, e:
                 self.app.log_client_error( e )
@@ -301,7 +307,7 @@
     def __copyFile( self, old_filename, new_full_filename, is_controlled, text_status, prop_status ):
         if not is_controlled:
             raise EnvironmentError( 'TBD - copy file' )
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             return
 
         if( text_status == pysvn.wc_status_kind.normal
@@ -312,7 +318,7 @@
 
     def __moveFile( self, old_filename, new_full_filename, is_controlled, text_status, prop_status ):
         if not is_controlled:
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             return
 
         if text_status == pysvn.wc_status_kind.added:
@@ -323,7 +329,7 @@
             print( T_('Rename %(from)s %(to)s') %
                     {'from': old_filename
                     ,'to': new_full_filename} )
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             self.project_info.client_fg.add( new_full_filename )
 
             # all_prop_lists is empty if there are no properties set
@@ -339,7 +345,7 @@
             for tmp_name_index in range( 100 ):
                 tmp_filename = os.path.join( os.path.dirname( old_filename ),
                     '%s.%d.tmp' % (new_full_filename, tmp_name_index) )
-                if not os.path.exists( tmp_filename ):
+                if not wb_platform_specific.uPathExists( tmp_filename ):
                     new_full_tmp_filename = tmp_filename
                     break
 
@@ -353,15 +359,15 @@
                 print( T_('Rename %(from)s %(to)s') %
                         {'from': old_filename
                         ,'to': new_full_tmp_filename} )
-                os.rename( old_filename, new_full_tmp_filename )
+                wb_platform_specific.uRename( old_filename, new_full_tmp_filename )
                 self.project_info.client_fg.revert( old_filename )
                 self.project_info.client_fg.move( old_filename, new_full_filename )
-                os.remove( new_full_filename )
+                wb_platform_specific.uRemove( new_full_filename )
 
                 print( T_('Rename %(from)s %(to)s') %
                             {'from': new_full_tmp_filename
                             ,'to': new_full_tmp_filename} )
-                os.rename( new_full_tmp_filename, new_full_filename )
+                wb_platform_specific.uRename( new_full_tmp_filename, new_full_filename )
 
                 if len(all_props) > 0:
                     _, prop_dict = all_props[0]
@@ -460,8 +466,11 @@
 
         if self.project_info.notification_of_files_in_conflict > 0:
             wx.MessageBox( S_("%d file is in conflict", 
-                              "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
-                T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
+                              "%d files are in conflict",
+                              self.project_info.notification_of_files_in_conflict) %
+                                    self.project_info.notification_of_files_in_conflict,
+                        T_("Warning"),
+                        style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
@@ -513,8 +522,11 @@
 
         if self.project_info.notification_of_files_in_conflict > 0:
             wx.MessageBox( S_("%d file is in conflict", 
-                              "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
-                              T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
+                              "%d files are in conflict",
+                              self.project_info.notification_of_files_in_conflict) %
+                                    self.project_info.notification_of_files_in_conflict,
+                            T_("Warning"),
+                            style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_list_handler_common.py svn-workbench-1.6.6/Source/wb_subversion_list_handler_common.py
--- svn-workbench-1.6.2/Source/wb_subversion_list_handler_common.py	2009-10-03 19:22:02.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_list_handler_common.py	2011-11-21 01:52:09.000000000 +0900
@@ -26,6 +26,7 @@
 import wb_subversion_properties_dialog
 import wb_subversion_diff
 import wb_config
+import wb_platform_specific
 
 col_labels = [
         ('Name',            U_('Name'),        25, 10, 100, wx.LIST_FORMAT_LEFT),
@@ -106,6 +107,15 @@
         for index, name in enumerate( self.column_order ):
             self.column_info_by_name[ name ].column = index
 
+    def getColumnWidth( self, column_name ):
+        return self.column_info_by_name[ column_name ].width
+
+    def setColumnWidth( self, column_name, width ):
+        info = self.column_info_by_name[ column_name ]
+        width = max( info.min_width, width )
+        width = min( info.max_width, width )
+        info.width = width
+
     def getColumnOrder( self ):
         return self.column_order
 
@@ -200,6 +210,10 @@
 
     def setupColumnInfo( self ):
         self.column_info.setFromPreferenceData( self.app.prefs.getView() )
+        self.overrideColumnInfo()
+
+    def overrideColumnInfo( self ):
+        pass
 
     def setupColumns( self ):
         self.setupColumnInfo()
@@ -228,8 +242,9 @@
 
         self.list_panel.updateHeader( self.project_info.url, self.project_info.wc_path )
 
-        # nothing doing if the wc does not exist
-        if self.project_info.need_checkout:
+        # nothing doing if the wc does not exist or needs upgrade
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             # empty the list
             g.DeleteAllItems()
 
@@ -283,7 +298,8 @@
     def sortList( self, sort_data ):
         self.app.log.debug('sortList' )
 
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             # nothing to sort
             return
 
@@ -354,6 +370,12 @@
     def OnGetItemText( self, index, col ):
         column = self.column_info.getNameByColumn( col )
 
+        if self.project_info.need_upgrade:
+            if column == self.col_name:
+                return T_('Use the Upgrade command to convert the working copy to the required format')
+            else:
+                return ''
+
         if self.project_info.need_checkout:
             if column == self.col_name:
                 if self.isProjectParent():
@@ -404,7 +426,8 @@
         return value
 
     def OnGetItemAttr( self, index ):
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             colour = wb_config.colour_status_need_checkout
         else:
             colour = self.statusColour( self.all_files[ index ] )
@@ -417,7 +440,8 @@
         return self.all_item_attr[ colour ]
 
     def isItemImageFolder(self, item):
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             return True
 
         elif self.GetItemIsDir( item ):
@@ -429,14 +453,14 @@
     def GetItemIsDir(self, item):
         status = self.all_files[ item ]
         if status.entry is None:
-            is_dir = os.path.isdir( status.path )
+            is_dir = wb_platform_specific.uPathIsdir( status.path )
         else:
             is_dir = status.entry.kind == pysvn.node_kind.dir
         return is_dir
     
     def __get_NameColumn( self, status, prefix_len ):
         if status.entry is None:
-            is_dir = os.path.isdir( status.path )
+            is_dir = wb_platform_specific.uPathIsdir( status.path )
         else:
             is_dir = status.entry.kind == pysvn.node_kind.dir
         if is_dir:
@@ -493,7 +517,7 @@
             return wb_subversion_utils.fmtDateTime( status.entry.commit_time )
 
     def __get_LockCommentColumn( self, status ):
-        if status.repos_lock is not None:
+        if status.repos_lock is not None and status.repos_lock.comment is not None:
             comment = status.repos_lock.comment.replace( '\n', ' ' )
         elif status.entry is not None and status.entry.lock_comment is not None:
             comment = status.entry.lock_comment.replace( '\n', ' ' )
@@ -516,6 +540,10 @@
 
         state = wb_list_panel_common.ListItemState()
 
+        if self.project_info.need_upgrade:
+            state.need_upgrade = True
+            return state
+
         if self.project_info.need_checkout:
             state.need_checkout = True
             state.ui_project_parent = True
@@ -535,10 +563,10 @@
         for row in all_rows:
             filename = self.all_files[ row ].path
 
-            if not os.path.exists( filename ):
+            if not wb_platform_specific.uPathExists( filename ):
                 state.file_exists = False
 
-            if os.path.isdir( filename ):
+            if wb_platform_specific.uPathIsdir( filename ):
                 state.modified = False
                 state.conflict = False
                 state.file_exists = False
@@ -603,7 +631,7 @@
     def mayOpen( self, row_or_status ):
         status = self.getStatusFromRowOrStatus( row_or_status )
         if status.entry is None:
-            return not os.path.isdir( self.getFilename( row_or_status ) )
+            return not wb_platform_specific.uPathIsdir( self.getFilename( row_or_status ) )
         else:
             return status.entry.kind == pysvn.node_kind.dir
 
@@ -974,7 +1002,7 @@
                     prop_dict = {}
                 else:
                     _, prop_dict = prop_list[0]
-                if os.path.isdir( filename ):
+                if wb_platform_specific.uPathIsdir( filename ):
                     dialog = wb_subversion_properties_dialog.DirPropertiesDialog( self.app,
                             self.list_panel.list_ctrl,
                             filename,
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_project_info.py svn-workbench-1.6.6/Source/wb_subversion_project_info.py
--- svn-workbench-1.6.2/Source/wb_subversion_project_info.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_project_info.py	2012-03-04 05:14:15.000000000 +0900
@@ -29,6 +29,8 @@
 import wb_subversion_tree_handler
 import wb_subversion_list_handler
 import wb_subversion_utils
+import wb_platform_specific
+import wb_subversion_utils
 
 _fast_proplist = True
 
@@ -48,6 +50,7 @@
 
         self.all_tree_files_status = []
         self.need_checkout = True
+        self.need_upgrade = False
         self.need_properties = False
         self.files_properties = {}
 
@@ -179,8 +182,13 @@
             self.notification_of_files_in_conflict += 1
 
         # print anything that gets through the filter
-        msg = '%s %s\n' % (action_letter, arg_dict['path'])
-        self.app.foregroundProcess( sys.stdout.write, (msg,) )
+        try:
+            path = arg_dict['path'].decode( 'utf-8' )
+        except ValueError:
+            path = arg_dict['path']
+
+        msg = u'%s %s\n' % (action_letter, path)
+        self.app.foregroundProcess( sys.stdout.write, (msg.encode( 'utf-8' ),) )
 
     def readPreferences( self, get_option ):
         wb_source_control_providers.ProjectInfo.readPreferences( self, get_option )
@@ -261,15 +269,26 @@
         self.dir_status = None
 
         self.need_checkout = True
-        if not os.path.exists( self.wc_path ):
+        if not wb_platform_specific.uPathExists( self.wc_path ):
             return
 
         p = self.app.prefs.getView()
+
         try:
+            self.need_upgrade = False
             entry = self.client_fg.info( self.wc_path )
+
         except pysvn.ClientError, e:
+            if wb_subversion_utils.version_info.has_upgrade:
+                # is it the  'Working copy XXX is too old' error?
+                if e.args[1][0][1] == pysvn.svn_err.wc_upgrade_required:
+                    self.need_checkout = False
+                    self.need_upgrade = True
+                    return
+
             # is it the  'is not a working copy' error?
             if e.args[1][0][1] == pysvn.svn_err.wc_not_directory:
+                # need_checkout
                 return
 
             print 'Error: %s' % e.args[0]
@@ -282,12 +301,14 @@
 
         self.all_files_status = self.client_fg.status( self.wc_path, recurse=p.view_recursive, ignore=False )
 
+
         self.need_checkout = False
 
         # sort list
         self.all_files_status.sort( wb_subversion_utils.by_path )
+
         # remember dir_status before filtering
-        if len(self.all_files_status) > 0 and self.all_files_status[0].path == self.wc_path:
+        if len(self.all_files_status) > 0 and os.path.normcase( self.all_files_status[0].path ) == os.path.normcase( self.wc_path ):
             self.dir_status = self.all_files_status[0]
             del self.all_files_status[0]
 
@@ -372,7 +393,7 @@
         return self.dir_status
 
     def __proplist( self, path ):
-        if os.path.isdir( path ):
+        if wb_platform_specific.uPathIsdir( path ):
             prop_file = os.path.join( path, '.svn', 'dir-props' )
             base_prop_file = os.path.join( path, '.svn', 'dir-prop-base' )
         else:
@@ -382,10 +403,10 @@
 
         result = {}
         try:
-            f = file( prop_file )
+            f = wb_platform_specific.uOpen( prop_file )
         except EnvironmentError:
             try:
-                f = file( base_prop_file )
+                f = wb_platform_specific.uOpen( base_prop_file )
             except EnvironmentError:
                 return result
 
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_branch_changes.py svn-workbench-1.6.6/Source/wb_subversion_report_branch_changes.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_branch_changes.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_branch_changes.py	2011-11-21 01:52:09.000000000 +0900
@@ -18,7 +18,6 @@
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 class ReportBranchChangesFrame(wx.Frame):
     def __init__( self, app, project_info, all_files ):
@@ -177,6 +176,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_lock.py svn-workbench-1.6.6/Source/wb_subversion_report_lock.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_lock.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_lock.py	2011-11-21 01:52:09.000000000 +0900
@@ -16,13 +16,13 @@
 import time
 import pysvn
 
+import wb_config
 import wb_ids
 import wb_images
 import wb_exceptions
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 class ReportLockFrame(wx.Frame):
     def __init__( self, app, project_info, all_files, show_repos_locks=False ):
@@ -220,6 +220,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_revision_changes.py svn-workbench-1.6.6/Source/wb_subversion_report_revision_changes.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_revision_changes.py	2009-10-03 17:21:08.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_revision_changes.py	2011-11-21 01:52:09.000000000 +0900
@@ -23,7 +23,6 @@
 import wb_subversion_diff
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 import wb_subversion_annotate
 import wb_subversion_info_dialog
 import wb_subversion_history
@@ -294,6 +293,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_updates.py svn-workbench-1.6.6/Source/wb_subversion_report_updates.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_updates.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_updates.py	2011-11-21 01:52:09.000000000 +0900
@@ -23,7 +23,6 @@
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 id_exclude = wx.NewId()
 id_include = wx.NewId()
@@ -254,6 +253,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_tree_handler.py svn-workbench-1.6.6/Source/wb_subversion_tree_handler.py
--- svn-workbench-1.6.2/Source/wb_subversion_tree_handler.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_tree_handler.py	2012-03-03 23:31:36.000000000 +0900
@@ -33,6 +33,7 @@
 import wb_clipboard
 import wb_dialogs
 import wb_config
+import wb_platform_specific
 
 class SubversionProject(wb_tree_panel.TreeProjectItem):
     def __init__( self, app, project_info ):
@@ -52,7 +53,7 @@
         dir_status = self.project_info.getDirStatus()
         if dir_status is None:
             # no status available - make a guess
-            if not os.path.exists( self.project_info.wc_path ):
+            if not wb_platform_specific.uPathExists( self.project_info.wc_path ):
                 # nothing there 
                 return False
             else:
@@ -61,7 +62,7 @@
 
         for file in self.project_info.getTreeFilesStatus():
             if( (file.entry is not None and file.entry.kind == pysvn.node_kind.dir)
-            or (file.entry is None and os.path.isdir( file.path )) ):
+            or (file.entry is None and wb_platform_specific.uPathIsdir( file.path )) ):
                 return True
 
         return False
@@ -71,7 +72,7 @@
 
         for file in self.project_info.getTreeFilesStatus():
 
-            if( (file.entry is None and os.path.isdir( file.path ))
+            if( (file.entry is None and wb_platform_specific.uPathIsdir( file.path ))
             or (file.entry is not None and file.entry.kind == pysvn.node_kind.dir) ):
                 pi = wb_subversion_project_info.ProjectInfo( self.app, self.project_info )
                 name = os.path.basename( file.path )
@@ -92,17 +93,17 @@
         dir_status = self.project_info.getDirStatus()
         if dir_status is None:
             # no status available - make a guess
-            if not os.path.exists( self.project_info.wc_path ):
+            if not wb_platform_specific.uPathExists( self.project_info.wc_path ):
                 # nothing there
                 return wb_config.colour_status_need_checkout
-            elif not os.path.exists( os.path.join( self.project_info.wc_path, '.svn' ) ):
+            elif not wb_platform_specific.uPathExists( os.path.join( self.project_info.wc_path, '.svn' ) ):
                 # not versioned
                 return wb_config.colour_status_unversioned
             else:
                 # versioned and present
                 return wb_config.colour_status_normal
 
-        elif not os.path.exists( dir_status.path ):
+        elif not wb_platform_specific.uPathExists( dir_status.path ):
             # nothing there
             return wb_config.colour_status_need_checkout
         elif dir_status.text_status in [pysvn.wc_status_kind.unversioned, pysvn.wc_status_kind.ignored]:
@@ -126,6 +127,7 @@
             state.unversioned = False
             state.need_checkin = False
             state.need_checkout = True
+            state.need_upgrade = False
             state.conflict = False
             state.file_exists = False
             state.revertable = False
@@ -137,10 +139,11 @@
             state.unversioned = True
             state.need_checkin = True
             state.need_checkout = False
+            state.need_upgrade = False
             state.conflict = True
             state.file_exists = True
 
-            if not os.path.exists( dir_status.path ):
+            if not wb_platform_specific.uPathExists( dir_status.path ):
                 state.file_exists = False
 
             text_status = dir_status.text_status
@@ -539,7 +542,7 @@
             and dialog.getTemplateFilename() is not None ):
                 try:
                     template_filename = os.path.join( template_dir, dialog.getTemplateFilename() )
-                    t = file( template_filename, 'r' )
+                    t = wb_platform_specific.uOpen( template_filename, 'r' )
                     template_contents = t.read()
                     t.close()
 
@@ -551,7 +554,7 @@
 
             try:
                 new_filename = os.path.join( self.project_info.wc_path, dialog.getNewFilename() )
-                f = file( new_filename, 'w' )
+                f = wb_platform_specific.uOpen( new_filename, 'w' )
                 f.write( template_contents )
                 f.close()
 
@@ -799,7 +802,7 @@
                     self.app.log_client_error( e )
             else:
                 try:
-                    os.rename( old_filename, new_full_filename )
+                    wb_platform_specific.uRename( old_filename, new_full_filename )
                 except (OSError,IOError), e:
                     self.app.log.error( str(e) )
 
@@ -887,11 +890,26 @@
 
             if self.project_info.notification_of_files_in_conflict > 0:
                 wx.MessageBox( S_("%d file is in conflict", 
-                                  "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
+                                  "%d files are in conflict",
+                                  self.project_info.notification_of_files_in_conflict) %
+                                        self.project_info.notification_of_files_in_conflict,
                                T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
+        self.app.refreshFrame()
+
+    def Cmd_Dir_Upgrade( self ):
+        self.app.setAction( T_('Upgrade %s...') % self.project_info.wc_path )
+
+        try:
+            self.project_info.client_fg.upgrade( self.project_info.wc_path )
+
+        except pysvn.ClientError, e:
+            self.app.log_client_error( e )
+
+        self.app.clearProgress()
+        self.app.setAction( T_('Ready') )
         self.app.refreshFrame()
 
     def Cmd_Dir_Copy( self, all_filenames ):
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_utils.py svn-workbench-1.6.6/Source/wb_subversion_utils.py
--- svn-workbench-1.6.2/Source/wb_subversion_utils.py	2009-09-14 01:02:30.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_utils.py	2011-11-21 07:37:53.000000000 +0900
@@ -25,6 +25,8 @@
         self.notify_action_has_failed_lock = hasattr( pysvn.wc_notify_action, 'failed_lock' )
         self.has_depth = hasattr( pysvn, 'depth' )
         self.notify_action_has_property_events = hasattr( pysvn.wc_notify_action, 'property_added' )
+        self.notify_action_has_upgrade_events = hasattr( pysvn.wc_notify_action, 'upgraded_path' )
+        self.has_upgrade = self.notify_action_has_upgrade_events
 
 version_info = svn_version_info()
 
@@ -150,6 +152,33 @@
     wc_notify_action_map[ pysvn.wc_notify_action.tree_conflict ] = 'tree_conflict'
     wc_notify_action_map[ pysvn.wc_notify_action.failed_external ] = 'failed_external'
 
+if version_info.notify_action_has_upgrade_events:
+    wc_notify_action_map[ pysvn.wc_notify_action.upgraded_path ] = 'upgraded_path'
+    wc_notify_action_map[ pysvn.wc_notify_action.update_started ] = "update_started"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_skip_obstruction ] = "update_skip_obstruction"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_skip_working_only ] = "update_skip_working_only"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_external_removed ] = "update_external_removed"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_add ] = "update_shadowed_add"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_update ] = "update_shadowed_update"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_delete ] = "update_shadowed_delete"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info ] = "merge_record_info"
+    wc_notify_action_map[ pysvn.wc_notify_action.upgraded_path ] = "upgraded_path"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info_begin ] = "merge_record_info_begin"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_elide_info ] = "merge_elide_info"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch ] = "patch"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_applied_hunk ] = "patch_applied_hunk"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_rejected_hunk ] = "patch_rejected_hunk"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_hunk_already_applied ] = "patch_hunk_already_applied"
+    wc_notify_action_map[ pysvn.wc_notify_action.commit_copied ] = "commit_copied"
+    wc_notify_action_map[ pysvn.wc_notify_action.commit_copied_replaced ] = "commit_copied_replaced"
+    wc_notify_action_map[ pysvn.wc_notify_action.url_redirect ] = "url_redirect"
+    wc_notify_action_map[ pysvn.wc_notify_action.path_nonexistent ] = "path_nonexistent"
+    wc_notify_action_map[ pysvn.wc_notify_action.exclude ] = "exclude"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_conflict ] = "failed_conflict"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_missing ] = "failed_missing"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_out_of_date ] = "failed_out_of_date"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_no_parent ] = "failed_no_parent"
+
 wc_notify_type_map = {
     pysvn.wc_notify_action.add: 'A',
     pysvn.wc_notify_action.commit_added: 'C',
@@ -191,6 +220,32 @@
     wc_notify_type_map[ pysvn.wc_notify_action.tree_conflict ] = None
     wc_notify_type_map[ pysvn.wc_notify_action.failed_external ] = None
 
+if version_info.notify_action_has_upgrade_events:
+    wc_notify_type_map[ pysvn.wc_notify_action.upgraded_path ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_started ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_skip_obstruction ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_skip_working_only ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_external_removed ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_add ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_update ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_delete ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_record_info ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.upgraded_path ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_record_info_begin ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_elide_info ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_applied_hunk ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_rejected_hunk ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_hunk_already_applied ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.commit_copied ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.commit_copied_replaced ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.url_redirect ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.path_nonexistent ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.exclude ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_conflict ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_missing ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_out_of_date ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_no_parent ] = None
 
 #
 #    format the concise status from file
diff -Nru svn-workbench-1.6.2/Source/wb_tree_panel.py svn-workbench-1.6.6/Source/wb_tree_panel.py
--- svn-workbench-1.6.2/Source/wb_tree_panel.py	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_tree_panel.py	2012-07-25 06:31:59.000000000 +0900
@@ -35,6 +35,7 @@
         self.unversioned = False
         self.need_checkin = False
         self.need_checkout = False
+        self.need_upgrade = False
         self.conflict = False
         self.file_exists = False
         self.is_folder = True
@@ -127,13 +128,11 @@
         dc.Clear()
         w, h = self.GetSize()
         if self.FindFocus() == self.tree_ctrl:
-            print 'tree focus'
             dc.SetPen( wx.Pen( "red", 1 ) )
             dc.DrawRectangle( 0, 0, w, h )
         else:
             dc.SetPen( wx.Pen( "green", 1 ) )
             dc.DrawRectangle( 0, 0, w, h )
-            print 'tree unfocus'
         event.Skip()
 
     def initFrame( self ):
@@ -266,6 +265,7 @@
 
         if first_item:
             self.tree_ctrl.SelectItem( first_item )
+            # QQQ: EnsureVisible causes an assert in wxPython 2.8.12.1 on Mac OS X
             self.tree_ctrl.EnsureVisible( first_item )
 
     def updateTreeSelectedItem( self ):
@@ -318,12 +318,14 @@
         child_item, cookie = self.tree_ctrl.GetFirstChild( this_item )
         while child_item:
             child_handler = self.tree_ctrl.GetPyData( child_item )
+            # Since WX 2.8.11.1 need to call updateStatus() here - guess that a callback sequence changed
+            child_handler.updateStatus()
             self.tree_ctrl.SetItemHasChildren( child_item, child_handler.mayExpand() )
             self.tree_ctrl.SetItemTextColour( child_item, child_handler.getTreeNodeColour() )
 
             child_item, cookie = self.tree_ctrl.GetNextChild( this_item, cookie )
 
-        # set the has children state
+        # set the has-children state
         self.tree_ctrl.SetItemHasChildren( this_item, len(project_info_list) > 0 )
 
     def gotoBookmark( self, bookmark_name ):
@@ -768,6 +770,9 @@
     def OnSpUpdateTo( self ):
         return self.Sp_Dispatch( 'Cmd_Dir_UpdateTo' )
 
+    def OnSpUpgrade( self ):
+        return self.Sp_Dispatch( 'Cmd_Dir_Upgrade' )
+
     #----------------------------------------
     def OnSpCopy( self, filename_list ):
         return self.Sp_DispatchDrop( 'Cmd_Dir_Copy', filename_list )
diff -Nru svn-workbench-1.6.2/Source/wb_version.py svn-workbench-1.6.6/Source/wb_version.py
--- svn-workbench-1.6.2/Source/wb_version.py	2010-01-04 00:53:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_version.py	2012-03-04 06:15:22.000000000 +0900
@@ -13,5 +13,5 @@
 '''
 major = 1
 minor = 6
-patch = 2
-build = 1283
+patch = 6
+build = 1465
diff -Nru svn-workbench-1.6.2/debian/changelog svn-workbench-1.6.6/debian/changelog
--- svn-workbench-1.6.2/debian/changelog	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/debian/changelog	2012-07-25 06:31:59.000000000 +0900
@@ -1,3 +1,13 @@
+svn-workbench (1.6.6-1) UNRELEASED; urgency=low
+
+  * QA upload.  
+  * New upstream release
+    - support subversion1.7
+  * debian/watch
+    - exec uupdate automatically
+
+ -- Hideki Yamane <henrich@debian.org>  Wed, 25 Jul 2012 05:16:20 +0900
+
 svn-workbench (1.6.2-2) unstable; urgency=low
 
   * Orphan the package.
diff -Nru svn-workbench-1.6.2/debian/watch svn-workbench-1.6.6/debian/watch
--- svn-workbench-1.6.2/debian/watch	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/debian/watch	2012-07-25 06:31:59.000000000 +0900
@@ -1,2 +1,2 @@
 version=3
-http://pysvn.tigris.org/project_downloads.html .*/WorkBench-(.*)\.tar\.gz
+http://pysvn.tigris.org/project_downloads.html .*/WorkBench-(.*)\.tar\.gz debian uupdate


diff -Nru svn-workbench-1.6.2/Builder/builder_custom_init.cmd svn-workbench-1.6.6/Builder/builder_custom_init.cmd
--- svn-workbench-1.6.2/Builder/builder_custom_init.cmd	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Builder/builder_custom_init.cmd	2011-11-06 23:19:48.000000000 +0900
@@ -4,12 +4,10 @@
 set PY_MAJ=2
 if not "%1" == "" set PY_MAJ=%1
 
-set PY_MIN=6
+set PY_MIN=7
 if not "%2" == "" set PY_MIN=%2
 
-set BUILD_TYPE=Release
-if not "%3" == "" set BUILD_TYPE=%3
-if not "%4" == "" set SVN_VER_MAJ_MIN=%4
+if not "%3" == "" set SVN_VER_MAJ_MIN=%3
 if "%SVN_VER_MAJ_MIN%" == "" set /p SVN_VER_MAJ_MIN="Build against Subversion Version [maj.min]: "
 if "%SVN_VER_MAJ_MIN%" == "" goto :eof
 
@@ -22,8 +20,10 @@
 if "%PY_MAJ%.%PY_MIN%" == "2.4" set COMPILER=msvc71
 if "%PY_MAJ%.%PY_MIN%" == "2.5" set COMPILER=msvc71
 if "%PY_MAJ%.%PY_MIN%" == "2.6" set COMPILER=msvc90
+if "%PY_MAJ%.%PY_MIN%" == "2.7" set COMPILER=msvc90
 if "%PY_MAJ%.%PY_MIN%" == "3.0" set COMPILER=msvc90
 if "%PY_MAJ%.%PY_MIN%" == "3.1" set COMPILER=msvc90
+if "%PY_MAJ%.%PY_MIN%" == "3.2" set COMPILER=msvc90
 
 if exist ..\..\ReleaseEngineering\win32-%COMPILER%\software-versions-%SVN_VER_MAJ_MIN%.cmd (
     pushd ..\..\ReleaseEngineering\win32-%COMPILER%
@@ -31,24 +31,24 @@
     popd
     )
 
-rem see if there is a built pysvn.pyd
+rem see if there is a built pysvn
 if not "%TARGET%" == "" set PYSVN_PYTHONPATH=%TARGET%\py%PY_MAJ%%PY_MIN%_pysvn\Source
-if not "%TARGET%" == "" set PYTHONPATH=%PYSVN_PYTHONPATH%
+if not "%TARGET%" == "" set PYTHONPATH=%PYSVN_PYTHONPATH%;%WORKDIR%\Source
+if "%TARGET%" == "" set PYTHONPATH=%WORKDIR%\Source
+
 echo PYTHONPATH %PYTHONPATH%
 
 set MEINC_INSTALLER_DIR=%WORKDIR%\Import\MEINC_Installer-%MEINC_INSTALLER_VER%-py%PY_MAJ%%PY_MIN%-win32
-set PYCHECKER_DIR=%WORKDIR%\Import\PyChecker
-set INCLUDE=%MEINC_INSTALLER_DIR%;%PYCHECKER_DIR%;%INCLUDE%
-set SUBVERSION=%TARGET%\subversion-%SVN_VER%
-set APR=%SUBVERSION%
-set PY=c:\python%PY_MAJ%%PY_MIN%
-set PYLIB=python%PY_MAJ%%PY_MIN%
+set INCLUDE=%MEINC_INSTALLER_DIR%;%INCLUDE%
+
+set PY=c:\python%PY_MAJ%%PY_MIN%.win32
+if not exist %PY%\python.exe set PY=c:\python%PY_MAJ%%PY_MIN%
+
 set PYTHON=%PY%\python.exe
 
 rem Need python and SVN on the path
-rem need c:\unxutils on the path to access the gettext utilities
-PATH %PY%;%SUBVERSION%\%BUILD_TYPE%\bin;c:\unxutils;%PATH%
+PATH %PY%;%SVN_BIN%;c:\UnxUtils;%PATH%
 
-python -c "import sys;print 'Info: Python Version',sys.version"
-python -c "import pysvn;print 'Info: pysvn Version',pysvn.version,'svn version',pysvn.svn_version"
+%PYTHON% -c "import sys;print 'Info: Python Version',sys.version"
+%PYTHON% -c "import pysvn;print 'Info: pysvn Version',pysvn.version,'svn version',pysvn.svn_version"
 popd
diff -Nru svn-workbench-1.6.2/Builder/builder_custom_init.sh svn-workbench-1.6.6/Builder/builder_custom_init.sh
--- svn-workbench-1.6.2/Builder/builder_custom_init.sh	2009-09-26 20:02:40.000000000 +0900
+++ svn-workbench-1.6.6/Builder/builder_custom_init.sh	2011-11-27 23:56:01.000000000 +0900
@@ -9,12 +9,12 @@
     if [ "$(uname)" = "Darwin" ]
     then
         # default to 2.3 on Mac OS X
-        PREF_VER=2.6
+        PREF_VER=2.7
     else
         PREF_VER=
     fi
 fi
-for PY_VER in ${PREF_VER} 2.6 2.5
+for PY_VER in ${PREF_VER} 2.7 2.6 2.5
 do
     # used in pick python to use in Builder driver makefile
     export PYTHON=$( which python${PY_VER} )
@@ -31,11 +31,8 @@
     export WC_SVNVERSION=svnversion
 fi
 
-export PYCXX=${WORKDIR}/Import/pycxx_${PYCXXVER}
-
 export MEINC_INSTALLER_DIR=${WORKDIR}/Import/MEINC_Installer
-export PYCHECKER_DIR=${WORKDIR}/Import/PyChecker
-for _DIR in ${WORKDIR}/../Extension/Source ${WORKDIR}/../py${PYSVN_PY_VER}_pysvn/Source
+for _DIR in ${WORKDIR}/../Extension/Source ${WORKDIR}/../py${PYSVN_PY_VER}_pysvn_python_org//Source
 do
     if [ -e "${_DIR}" ]
     then
diff -Nru svn-workbench-1.6.2/Builder/linux.mak svn-workbench-1.6.6/Builder/linux.mak
--- svn-workbench-1.6.2/Builder/linux.mak	2004-08-07 19:32:21.000000000 +0900
+++ svn-workbench-1.6.6/Builder/linux.mak	2010-11-19 00:29:25.000000000 +0900
@@ -12,6 +12,7 @@
 	cd ../Import/MEINC_Installer/source/linux && $(PYTHON) Make.py && $(MAKE) && rm -f ../../config.dat
 
 clean:
+	find .. -name '*.pyc' -exec rm {} ';'
 	cd ../Source && $(MAKE) -f linux.mak clean
 	cd ../Kit/Linux && rm -rf tmp
 	cd ../Import/MEINC_Installer/source/linux && $(MAKE) clean
diff -Nru svn-workbench-1.6.2/Builder/version.info svn-workbench-1.6.6/Builder/version.info
--- svn-workbench-1.6.2/Builder/version.info	2009-10-03 17:06:15.000000000 +0900
+++ svn-workbench-1.6.6/Builder/version.info	2011-02-28 05:20:43.000000000 +0900
@@ -1,4 +1,4 @@
 MAJOR=1
 MINOR=6
-PATCH=2
+PATCH=6
 BUILD=0
diff -Nru svn-workbench-1.6.2/INSTALL.html svn-workbench-1.6.6/INSTALL.html
--- svn-workbench-1.6.2/INSTALL.html	2008-12-03 07:25:19.000000000 +0900
+++ svn-workbench-1.6.6/INSTALL.html	2011-02-21 03:45:46.000000000 +0900
@@ -4,7 +4,7 @@
 <head>
 <title>Installing pysvn Workbench</title>
 <style type="text/css">
-pre 
+pre
     {
     max-width: 40em;
     margin-left: 4em;
@@ -22,11 +22,13 @@
 <h2>Prerequisites</h2>
 
 <ul>
-<li>Python 2.4 or later</li>
+<li><a href="http://www.python.org/";>Python</a> version 2.4 or later.</li>
 
-<li>Install the pysvn Extension 1.5.0 or later.</li>
+<li>Install the <a href="http://pysvn.tigris.org/";>pysvn</a> Extension 1.5.0 or later.</li>
 
-<li>Install wxPython verison 2.6.1.0 or better.</li>
+<li>Install <a href="http://www.wxpython.org/";>wxPython</a> version 2.6.1.0 or better.</li>
+
+<li>If necessary install <a href="http://sourceforge.net/projects/pywin32/";>pywin32</a> version 2.8.8.0 or better.</li>
 </ul>
 
 <h2>Preparing to run WorkBench</h2>
@@ -44,5 +46,12 @@
 <p>In the <code>Source</code> folder:</p>
 <pre>python wb_main.py</pre>
 
+<h2>Troubleshooting</h2>
+
+<p>Check the output from wb_main.py. You can prevent wb_main.py redirecting stdout by running as:</p>
+<pre>python wb_main.py --noredirect</pre>
+
+<p>On Windows does not have a usable stdout instead check &quot;%TEMP%\workbench.tmp&quot; for Python messages and errors.</p>
+
 </body>
 </html>
diff -Nru svn-workbench-1.6.2/Kit/Win32/msvc90_system_files.iss svn-workbench-1.6.6/Kit/Win32/msvc90_system_files.iss
--- svn-workbench-1.6.2/Kit/Win32/msvc90_system_files.iss	2009-09-26 07:01:20.000000000 +0900
+++ svn-workbench-1.6.6/Kit/Win32/msvc90_system_files.iss	2011-11-06 23:19:48.000000000 +0900
@@ -3,8 +3,8 @@
 ;
 
 ; begin VC system files
-Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest"; DestDir: "{app}"
-Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcm90.dll"; DestDir: "{app}"
-Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcp90.dll"; DestDir: "{app}"
-Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcr90.dll"; DestDir: "{app}"
+Source: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest"; DestDir: "{app}"
+Source: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcm90.dll"; DestDir: "{app}"
+Source: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcp90.dll"; DestDir: "{app}"
+Source: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcr90.dll"; DestDir: "{app}"
 ; end VC system files
diff -Nru svn-workbench-1.6.2/Kit/Win32/win32.mak svn-workbench-1.6.6/Kit/Win32/win32.mak
--- svn-workbench-1.6.2/Kit/Win32/win32.mak	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Kit/Win32/win32.mak	2011-11-06 23:19:48.000000000 +0900
@@ -4,7 +4,7 @@
 	copy ..\..\LICENSE.txt tmp\workbench_LICENSE.txt
 	copy ..\..\Source\bin\wb.exe tmp\WorkBench.exe
 	copy ..\..\Source\bin\wb.exe.manifest tmp\WorkBench.exe.manifest
-	"c:\Program Files\Inno Setup 5\ISCC.exe" tmp\workbench-branded.iss
+	"c:\Program Files (x86)\Inno Setup 5\ISCC.exe" tmp\workbench-branded.iss
 	tmp\setup_copy.cmd
 
 info_before.txt: workbench-branded.iss
@@ -16,7 +16,7 @@
 	python setup_version_handling.py
 
 debug:
-	"c:\Program Files\Inno Setup 5\Compil32.exe" workbench-branded.iss
+	"c:\Program Files (x86)\Inno Setup 5\Compil32.exe" workbench-branded.iss
 
 clean:
 	if exist tmp rmdir /s /q tmp
diff -Nru svn-workbench-1.6.2/Kit/Win32/workbench.iss svn-workbench-1.6.6/Kit/Win32/workbench.iss
--- svn-workbench-1.6.2/Kit/Win32/workbench.iss	2009-10-03 17:35:08.000000000 +0900
+++ svn-workbench-1.6.6/Kit/Win32/workbench.iss	2012-03-03 19:53:31.000000000 +0900
@@ -12,7 +12,7 @@
 [Setup]
 AppName=WorkBench
 AppVerName=WorkBench UNCONTROLLED
-AppCopyright=Copyright (C) 2003-2007 Barry A. Scott
+AppCopyright=Copyright (C) 2003-2012 Barry A. Scott
 DefaultDirName={pf}\PySVN\WorkBench
 DefaultGroupName=WorkBench for Subversion
 UninstallDisplayIcon={app}\WorkBench.exe
@@ -32,5 +32,5 @@
 
 Source: "workbench_LICENSE.txt"; DestDir: "{app}";
 Source: "..\..\..\Docs\WorkBench.html"; DestDir: "{app}";
-Source: "WorkBench.exe"; DestDir: "{app}";
-Source: "WorkBench.exe.manifest"; DestDir: "{app}";
+Source: "WorkBench.exe"; DestDir: "{app}"; Flags: ignoreversion;
+Source: "WorkBench.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion;
diff -Nru svn-workbench-1.6.2/LICENSE.txt svn-workbench-1.6.6/LICENSE.txt
--- svn-workbench-1.6.2/LICENSE.txt	2009-01-10 23:35:03.000000000 +0900
+++ svn-workbench-1.6.6/LICENSE.txt	2012-03-03 23:57:22.000000000 +0900
@@ -1,5 +1,5 @@
 =================================================================
-Copyright (C) 2003-2009 Barry A. Scott. All rights reserved.
+Copyright (C) 2003-2012 Barry A. Scott. All rights reserved.
 
 =================================================================
 The Apache Software License, Version 1.1
diff -Nru svn-workbench-1.6.2/Source/I18N/pysvn_workbench_hu.po svn-workbench-1.6.6/Source/I18N/pysvn_workbench_hu.po
--- svn-workbench-1.6.2/Source/I18N/pysvn_workbench_hu.po	1970-01-01 09:00:00.000000000 +0900
+++ svn-workbench-1.6.6/Source/I18N/pysvn_workbench_hu.po	2010-07-26 00:44:44.000000000 +0900
@@ -0,0 +1,2416 @@
+# Hungarian translation of pysvn/WorkBench
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the pysvn/WorkBench package.
+# Laszlo Csordas <csola48 at gmail dot com>, Copyright (C) 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pysvn_workbench_hu.current\n"
+"Report-Msgid-Bugs-To: barryscott@tigris.org\n"
+"POT-Creation-Date: 2009-09-30 19:53+0200\n"
+"PO-Revision-Date: 2010-07-11 10:15+0100\n"
+"Last-Translator: csola48 <csola48@gmail.com>\n"
+"Language-Team: magyar <csola48@gmail.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: wb_app.py:111
+#: wb_frame.py:43
+msgid "PySVN WorkBench"
+msgstr "PySVN WorkBench"
+
+#: wb_app.py:185
+msgid "Work Bench starting"
+msgstr "WorkBench ind鱈t叩sa"
+
+#: wb_bookmarks_dialogs.py:58
+#: wb_frame.py:158
+msgid "Manage Bookmarks"
+msgstr "Kテカnyvjelzナ_ kezelテゥse"
+
+#: wb_bookmarks_dialogs.py:73
+#: wb_bookmarks_dialogs.py:74
+#: wb_bookmarks_dialogs.py:75
+#: wb_bookmarks_dialogs.py:76
+msgid "Menu"
+msgstr "Men端"
+
+#: wb_bookmarks_dialogs.py:77
+msgid "WC Path"
+msgstr "Munkap辿ld叩ny 炭tvonala"
+
+#: wb_bookmarks_dialogs.py:93
+#: wb_preferences_dialog.py:374
+msgid " Delete "
+msgstr "T旦rl辿s"
+
+#: wb_bookmarks_dialogs.py:96
+msgid " Properties "
+msgstr "Tulajdons叩gok"
+
+#: wb_bookmarks_dialogs.py:99
+#: wb_bookmarks_dialogs.py:306
+#: wb_dialogs.py:59
+#: wb_dialogs.py:187
+#: wb_dialogs.py:244
+#: wb_dialogs.py:314
+#: wb_dialogs.py:388
+#: wb_dialogs.py:444
+#: wb_dialogs.py:511
+#: wb_dialogs.py:610
+#: wb_dialogs.py:736
+#: wb_preferences_dialog.py:59
+#: wb_project_dialogs.py:103
+#: wb_subversion_history.py:228
+#: wb_subversion_info_dialog.py:35
+#: wb_subversion_properties_dialog.py:175
+msgid " OK "
+msgstr " OK "
+
+#: wb_bookmarks_dialogs.py:100
+#: wb_bookmarks_dialogs.py:307
+#: wb_dialogs.py:60
+#: wb_dialogs.py:189
+#: wb_dialogs.py:246
+#: wb_dialogs.py:316
+#: wb_dialogs.py:390
+#: wb_dialogs.py:446
+#: wb_dialogs.py:513
+#: wb_dialogs.py:612
+#: wb_dialogs.py:739
+#: wb_preferences_dialog.py:61
+#: wb_project_dialogs.py:105
+#: wb_subversion_checkin.py:137
+#: wb_subversion_history.py:230
+#: wb_subversion_properties_dialog.py:177
+#: wb_subversion_report_updates.py:287
+msgid " Cancel "
+msgstr " T旦r旦l"
+
+#: wb_bookmarks_dialogs.py:244
+msgid "Bookmark Properties"
+msgstr "Kテカnyvjelzナ_ tulajdonsテ。gok"
+
+#: wb_bookmarks_dialogs.py:286
+msgid "WC Path: "
+msgstr "Munkap辿ld叩ny 炭tvonala: "
+
+#: wb_bookmarks_dialogs.py:290
+msgid "Menu1: "
+msgstr "Men端 1: "
+
+#: wb_bookmarks_dialogs.py:294
+msgid "Menu2: "
+msgstr "Men端 2: "
+
+#: wb_bookmarks_dialogs.py:298
+msgid "Menu3: "
+msgstr "Men端 3: "
+
+#: wb_bookmarks_dialogs.py:302
+msgid "Menu Name: "
+msgstr "Men端 neve: "
+
+#: wb_dialogs.py:40
+msgid "Status"
+msgstr "テ〕lapot"
+
+#: wb_dialogs.py:42
+msgid "Filename"
+msgstr "F叩jln辿v"
+
+#: wb_dialogs.py:56
+msgid "Force"
+msgstr "K辿nyszer鱈t"
+
+#: wb_dialogs.py:134
+#: wb_subversion_checkin.py:140
+msgid "Insert Last Message"
+msgstr "Utols坦 端zenet besz炭r叩sa"
+
+#: wb_dialogs.py:164
+msgid "Credentials"
+msgstr "Igazol坦 iratok"
+
+#: wb_dialogs.py:168
+msgid "Username:"
+msgstr "Felhaszn叩l坦 neve:"
+
+#: wb_dialogs.py:176
+msgid "Password:"
+msgstr "Jelsz坦:"
+
+#: wb_dialogs.py:182
+msgid "Always uses these credentials"
+msgstr "M叩r haszn叩lt ez az igazol坦 irat"
+
+#: wb_dialogs.py:227
+#, python-format
+msgid "Trust server %s"
+msgstr "Hitelesテュtナ_ szerver %s"
+
+#: wb_dialogs.py:232
+msgid "Server Certificate"
+msgstr "Szerver igazol叩s"
+
+#: wb_dialogs.py:239
+msgid "Always trust this server"
+msgstr "Ez a szerver m叩r hiteles鱈tett"
+
+#: wb_dialogs.py:290
+#: wb_frame.py:114
+#: wb_frame.py:157
+#: wb_subversion_list_handler.py:73
+msgid "Add"
+msgstr "Hozz叩ad叩s"
+
+#: wb_dialogs.py:294
+#: wb_dialogs.py:366
+msgid "From:"
+msgstr "Innen:"
+
+#: wb_dialogs.py:300
+msgid "Force Add"
+msgstr "K辿nyszer鱈tett hozz叩ad叩s"
+
+#: wb_dialogs.py:306
+msgid "Recursive Add"
+msgstr "Rekurz鱈v hozz叩ad叩s"
+
+#: wb_dialogs.py:362
+#: wb_frame.py:115
+#: wb_subversion_list_handler.py:150
+#: wb_subversion_list_handler.py:379
+#: wb_subversion_list_handler.py:386
+#: wb_subversion_tree_handler.py:794
+msgid "Rename"
+msgstr "テ》nevezテゥs"
+
+#: wb_dialogs.py:372
+msgid "To:"
+msgstr "Eddig:"
+
+#: wb_dialogs.py:383
+msgid "Force rename"
+msgstr "K辿nyszer鱈tett 叩tnevez辿s"
+
+#: wb_dialogs.py:436
+#: wb_subversion_info_dialog.py:56
+#: wb_subversion_tree_handler.py:513
+msgid "Name:"
+msgstr "N辿v:"
+
+#: wb_dialogs.py:437
+msgid "New Folder"
+msgstr "テ嗚 dossziテゥ"
+
+#: wb_dialogs.py:480
+#: wb_dialogs.py:485
+msgid "New File"
+msgstr "テ嗚 fテ。jl"
+
+#: wb_dialogs.py:489
+msgid "New Filename:"
+msgstr "テ嗚 fテ。jlnテゥv:"
+
+#: wb_dialogs.py:504
+msgid "Template:"
+msgstr "Minta:"
+
+#: wb_dialogs.py:554
+msgid "Empty directory"
+msgstr "テ徨es kテカnyvtテ。r"
+
+#: wb_dialogs.py:556
+msgid "Children files only"
+msgstr "Csak alf叩jlok"
+
+#: wb_dialogs.py:557
+msgid "Immediate children"
+msgstr "K旦zvetlen alf叩jlok"
+
+#: wb_dialogs.py:558
+msgid "Only already checked out descendants"
+msgstr "Csak mテ。r ellenナ喪zテカtt leszテ。rmazottak"
+
+#: wb_dialogs.py:559
+msgid "All descendants (Full recursion)"
+msgstr "テ穆szes leszテ。rmazott (teljesen rekurzテュv)"
+
+#: wb_dialogs.py:570
+msgid "HEAD revision"
+msgstr "HEAD rev鱈zi坦"
+
+#: wb_dialogs.py:578
+#: wb_subversion_info_dialog.py:64
+#: wb_subversion_info_dialog.py:108
+msgid "Revision:"
+msgstr "Rev鱈zi坦:"
+
+#: wb_dialogs.py:590
+msgid "Apply on"
+msgstr "Alkalmaz叩s be"
+
+#: wb_dialogs.py:593
+msgid "Recursive (all)"
+msgstr "Rekurz鱈v (旦sszes)"
+
+#: wb_dialogs.py:599
+msgid "Depth:"
+msgstr "M辿lys辿g:"
+
+#: wb_dialogs.py:648
+msgid "Please enter a revision number > 0!"
+msgstr "テ荒jon egy revテュziテウ szテ。mot, amely > 0!"
+
+#: wb_dialogs.py:653
+msgid "Please enter digits only!"
+msgstr "Csak sz叩mjegy lehet!"
+
+#: wb_dialogs.py:705
+msgid "Copy From:"
+msgstr "M叩sol innen:"
+
+#: wb_dialogs.py:708
+msgid "Copy To:"
+msgstr "M叩sol ide:"
+
+#: wb_dialogs.py:733
+#: wb_subversion_checkin.py:133
+msgid "Log message"
+msgstr "Napl坦 bejegyz辿s"
+
+#: wb_dialogs.py:791
+#: wb_frame.py:122
+msgid "Create Tag"
+msgstr "Tag k辿sz鱈t辿se"
+
+#: wb_dialogs.py:795
+#: wb_frame.py:123
+msgid "Create Branch"
+msgstr "Branch k辿sz鱈t辿se"
+
+#: wb_diff_frame.py:49
+#: wb_show_diff_frame.py:32
+#, python-format
+msgid "Diff %(title1)s and %(title2)s"
+msgstr "テ穆szehasonlテュtテ。s a/z/ %(title1)s テゥs a/z/ %(title2)s kテカzテカtt"
+
+#: wb_diff_frame.py:59
+msgid "Expand folds"
+msgstr "Dosszi辿 kibont叩sa"
+
+#: wb_diff_frame.py:59
+msgid "Expand all folds"
+msgstr "テ穆szes dossziテゥ kibontテ。sa"
+
+#: wb_diff_frame.py:60
+msgid "Collapse folds"
+msgstr "Dosszi辿 bez叩r叩sa"
+
+#: wb_diff_frame.py:60
+msgid "Collapse all folds"
+msgstr "テ穆szes dossziテゥn bezテ。rテ。sa"
+
+#: wb_diff_frame.py:62
+msgid "Toggle whitespace"
+msgstr "L叩that坦 sz坦k旦z bekapcsol叩sa"
+
+#: wb_diff_frame.py:62
+msgid "Show/hide whitespace"
+msgstr "L叩that坦 sz坦k旦z mutat叩sa/rejt辿se"
+
+#: wb_diff_frame.py:64
+msgid "Previous difference"
+msgstr "Kor叩bbi k端l旦nbs辿g"
+
+#: wb_diff_frame.py:64
+msgid "Positions the cursor at the previous difference between the files"
+msgstr "Helyezze a kurzort a fテ。jlok kテカzテカtti megelナ想ナ_ kテシlテカnbsテゥgre"
+
+#: wb_diff_frame.py:65
+msgid "Next difference"
+msgstr "Kテカvetkezナ_ kテシlテカnbsテゥg"
+
+#: wb_diff_frame.py:65
+msgid "Positions the cursor at the next difference between the files"
+msgstr "Helyezze a kurzort a fテ。jlok kテカzテカtti kテカvetkezナ_ kテシlテカnbsテゥgre"
+
+#: wb_diff_frame.py:85
+msgid "Key: "
+msgstr "Kulcs: "
+
+#: wb_diff_frame.py:86
+msgid "Inserted text "
+msgstr "Besz炭rt sz旦veg "
+
+#: wb_diff_frame.py:87
+msgid "Deleted text "
+msgstr "T旦r旦lt sz旦veg"
+
+#: wb_diff_frame.py:88
+msgid "Changed text"
+msgstr "Cser辿lt sz旦veg"
+
+#: wb_diff_frame.py:176
+#, python-format
+msgid "Diff %(change1)d of %(change2)d"
+msgstr "テ穆szehasonlテュtテ。s a/z/ %(change1)d テゥs a/z/ %(change2)d kテカzテカtt"
+
+#: wb_frame.py:62
+msgid "&Copy"
+msgstr "&M叩sol"
+
+#: wb_frame.py:62
+msgid "Copy Files"
+msgstr "F叩jl m叩sol叩sa"
+
+#: wb_frame.py:63
+msgid "&Cut"
+msgstr "&V叩g叩s"
+
+#: wb_frame.py:63
+msgid "Cut Files"
+msgstr "F叩jl kiv叩g叩sa"
+
+#: wb_frame.py:64
+msgid "&Paste"
+msgstr "&Beilleszt辿s"
+
+#: wb_frame.py:64
+msgid "Paste Files"
+msgstr "F叩jl beilleszt辿se"
+
+#: wb_frame.py:66
+msgid "&Clear log"
+msgstr "Napl坦 ki端r鱈t辿se"
+
+#: wb_frame.py:66
+msgid "Clear the log window"
+msgstr "Napl坦 ablak ki端r鱈t辿se"
+
+#: wb_frame.py:73
+msgid "&Preferences..."
+msgstr "&Be叩ll鱈t叩sok"
+
+#: wb_frame.py:73
+#: wb_preferences_dialog.py:24
+msgid "Preferences"
+msgstr "Be叩ll鱈t叩sok"
+
+#: wb_frame.py:74
+msgid "E&xit"
+msgstr "&Kil辿p辿s"
+
+#: wb_frame.py:74
+msgid "Exit the application"
+msgstr "Kil辿p辿s egy alkalmaz叩sb坦l"
+
+#: wb_frame.py:77
+#: wb_subversion_tree_handler.py:174
+msgid "&Command Shell"
+msgstr "&Termin叩l"
+
+#: wb_frame.py:77
+#: wb_toolbars.py:91
+msgid "Command Shell"
+msgstr "Termin叩l"
+
+#: wb_frame.py:78
+#: wb_subversion_tree_handler.py:175
+msgid "&File Browser"
+msgstr "&Fテ。jlkezelナ_"
+
+#: wb_frame.py:78
+#: wb_toolbars.py:95
+msgid "File Browser"
+msgstr "Fテ。jlkezelナ_"
+
+#: wb_frame.py:80
+#: wb_subversion_checkin.py:38
+#: wb_subversion_checkin.py:335
+#: wb_subversion_list_handler.py:42
+#: wb_subversion_report_updates.py:216
+msgid "Edit"
+msgstr "Szerkeszt辿s"
+
+#: wb_frame.py:81
+#: wb_subversion_checkin.py:40
+#: wb_subversion_checkin.py:339
+#: wb_subversion_list_handler.py:45
+#: wb_subversion_report_updates.py:219
+msgid "Open"
+msgstr "Megnyit叩s"
+
+#: wb_frame.py:83
+#: wb_subversion_checkin.py:42
+#: wb_subversion_checkin.py:343
+#: wb_subversion_list_handler.py:48
+#: wb_subversion_tree_handler.py:177
+msgid "Diff WC vs. BASE..."
+msgstr "テ穆szehasonlテュtテ。s: munkapテゥldテ。ny テゥs BASE..."
+
+#: wb_frame.py:84
+#: wb_subversion_checkin.py:43
+#: wb_subversion_checkin.py:344
+#: wb_subversion_list_handler.py:49
+#: wb_subversion_report_branch_changes.py:30
+#: wb_subversion_report_branch_changes.py:158
+#: wb_subversion_report_lock.py:38
+#: wb_subversion_report_lock.py:194
+#: wb_subversion_report_updates.py:38
+#: wb_subversion_report_updates.py:222
+#: wb_subversion_tree_handler.py:178
+msgid "Diff WC vs. HEAD..."
+msgstr "テ穆szehasonlテュtテ。s: munkapテゥldテ。ny テゥs HEAD..."
+
+#: wb_frame.py:85
+#: wb_subversion_checkin.py:44
+#: wb_subversion_checkin.py:345
+#: wb_subversion_list_handler.py:50
+#: wb_subversion_report_branch_changes.py:31
+#: wb_subversion_report_branch_changes.py:159
+#: wb_subversion_report_lock.py:39
+#: wb_subversion_report_lock.py:195
+#: wb_subversion_report_updates.py:39
+#: wb_subversion_report_updates.py:223
+msgid "Diff WC vs. branch origin BASE..."
+msgstr "テ穆szehasonlテュtテ。s: munkapテゥldテ。ny kontra branch eredeti BASE..."
+
+#: wb_frame.py:86
+#: wb_subversion_checkin.py:45
+#: wb_subversion_checkin.py:346
+#: wb_subversion_list_handler.py:51
+#: wb_subversion_report_branch_changes.py:32
+#: wb_subversion_report_branch_changes.py:160
+#: wb_subversion_report_lock.py:40
+#: wb_subversion_report_lock.py:196
+#: wb_subversion_report_updates.py:40
+#: wb_subversion_report_updates.py:224
+msgid "Diff WC vs. branch origin HEAD..."
+msgstr "テ穆szehasonlテュtテ。s: munkapテゥldテ。ny kontra branch eredeti HEAD..."
+
+#: wb_frame.py:89
+#: wb_subversion_list_handler.py:52
+msgid "Conflict"
+msgstr "Konfliktus"
+
+#: wb_frame.py:90
+#: wb_subversion_list_handler.py:53
+msgid "Diff Conflict Old vs. Mine..."
+msgstr "テ穆szehasonlテュtテウ konfliktus: rテゥgi テゥs sajテ。t..."
+
+#: wb_frame.py:91
+#: wb_subversion_list_handler.py:54
+msgid "Diff Conflict Mine vs. New..."
+msgstr "テ穆szehasonlテュtテウ konfliktus: sajテ。t テゥs テコj..."
+
+#: wb_frame.py:92
+#: wb_subversion_list_handler.py:55
+msgid "Diff Conflict Old vs. New..."
+msgstr "テ穆szehasonlテュtテウ konfliktus: rテゥgi テゥs テコj..."
+
+#: wb_frame.py:94
+#: wb_subversion_list_handler.py:57
+msgid "Resolved Conflict"
+msgstr "Feloldott konfliktus"
+
+#: wb_frame.py:97
+#: wb_subversion_checkin.py:48
+#: wb_subversion_checkin.py:348
+#: wb_subversion_list_handler.py:60
+#: wb_subversion_report_branch_changes.py:35
+#: wb_subversion_report_branch_changes.py:162
+#: wb_subversion_report_lock.py:43
+#: wb_subversion_report_lock.py:198
+#: wb_subversion_report_revision_changes.py:50
+#: wb_subversion_report_revision_changes.py:279
+#: wb_subversion_report_updates.py:43
+#: wb_subversion_report_updates.py:226
+msgid "Annotate..."
+msgstr "Megjegyz辿s..."
+
+#: wb_frame.py:98
+#: wb_subversion_checkin.py:49
+#: wb_subversion_checkin.py:349
+#: wb_subversion_list_handler.py:61
+#: wb_subversion_report_branch_changes.py:36
+#: wb_subversion_report_branch_changes.py:163
+#: wb_subversion_report_lock.py:44
+#: wb_subversion_report_lock.py:199
+#: wb_subversion_report_revision_changes.py:51
+#: wb_subversion_report_revision_changes.py:280
+#: wb_subversion_report_updates.py:44
+#: wb_subversion_report_updates.py:227
+#: wb_subversion_tree_handler.py:180
+msgid "Log history..."
+msgstr "Naplテウ elナ想mテゥnyek..."
+
+#: wb_frame.py:99
+#: wb_subversion_checkin.py:50
+#: wb_subversion_checkin.py:350
+#: wb_subversion_list_handler.py:62
+#: wb_subversion_report_branch_changes.py:37
+#: wb_subversion_report_branch_changes.py:164
+#: wb_subversion_report_lock.py:45
+#: wb_subversion_report_lock.py:200
+#: wb_subversion_report_revision_changes.py:52
+#: wb_subversion_report_revision_changes.py:281
+#: wb_subversion_tree_handler.py:181
+msgid "Information..."
+msgstr "Inform叩ci坦..."
+
+#: wb_frame.py:100
+#: wb_subversion_checkin.py:51
+#: wb_subversion_checkin.py:351
+#: wb_subversion_list_handler.py:63
+#: wb_subversion_tree_handler.py:182
+msgid "Properties..."
+msgstr "Tulajdons叩gok..."
+
+#: wb_frame.py:102
+#: wb_subversion_list_handler.py:68
+#: wb_subversion_tree_handler.py:188
+msgid "Update"
+msgstr "Friss鱈t辿s"
+
+#: wb_frame.py:103
+msgid "Update to..."
+msgstr "Friss鱈t辿s..."
+
+#: wb_frame.py:104
+#: wb_subversion_list_handler.py:39
+#: wb_subversion_tree_handler.py:185
+msgid "Checkout"
+msgstr "Ellenナ喪zテゥs"
+
+#: wb_frame.py:105
+#: wb_subversion_tree_handler.py:186
+msgid "Checkout to..."
+msgstr "Ellenナ喪zテゥs..."
+
+#: wb_frame.py:107
+#: wb_subversion_list_handler.py:71
+#: wb_subversion_tree_handler.py:191
+msgid "Checkin..."
+msgstr "Ellenナ喪zテゥs..."
+
+#: wb_frame.py:109
+#: wb_subversion_list_handler.py:65
+#: wb_subversion_report_lock.py:202
+msgid "Lock..."
+msgstr "Z叩r叩s..."
+
+#: wb_frame.py:110
+#: wb_subversion_list_handler.py:66
+#: wb_subversion_report_lock.py:203
+msgid "Unlock..."
+msgstr "Nyit叩s..."
+
+#: wb_frame.py:112
+#: wb_subversion_tree_handler.py:193
+msgid "New File..."
+msgstr "テ嗚 fテ。jl..."
+
+#: wb_frame.py:113
+#: wb_subversion_tree_handler.py:194
+msgid "Make directory..."
+msgstr "K旦nyvt叩r k辿sz鱈t辿se..."
+
+#: wb_frame.py:115
+#: wb_subversion_list_handler.py:74
+#: wb_subversion_tree_handler.py:196
+msgid "Rename..."
+msgstr "テ》nevezテゥs..."
+
+#: wb_frame.py:117
+#: wb_frame.py:167
+#: wb_subversion_list_handler.py:76
+#: wb_subversion_tree_handler.py:198
+msgid "Delete..."
+msgstr "T旦rl辿s..."
+
+#: wb_frame.py:117
+msgid "Delete"
+msgstr "T旦rl辿s"
+
+#: wb_frame.py:118
+#: wb_subversion_checkin.py:352
+#: wb_subversion_list_handler.py:77
+#: wb_subversion_tree_handler.py:199
+msgid "Revert..."
+msgstr "Visszavon叩s..."
+
+#: wb_frame.py:118
+#: wb_subversion_checkin.py:93
+#: wb_subversion_checkin.py:378
+#: wb_subversion_list_handler.py:399
+#: wb_subversion_tree_handler.py:819
+msgid "Revert"
+msgstr "Visszavon叩s"
+
+#: wb_frame.py:120
+#: wb_subversion_list_handler.py:79
+#: wb_subversion_tree_handler.py:201
+msgid "Clean up"
+msgstr "Tiszt鱈t叩s"
+
+#: wb_frame.py:120
+msgid "Clean up working copy"
+msgstr "Munkap辿ld叩ny tiszt鱈t叩sa"
+
+#: wb_frame.py:122
+msgid "Create Tag..."
+msgstr "Tag k辿sz鱈t辿se..."
+
+#: wb_frame.py:123
+msgid "Create Branch..."
+msgstr "Branch k辿sz鱈t辿se..."
+
+#: wb_frame.py:126
+msgid "Working copy Locks..."
+msgstr "Munkap辿ld叩ny z叩r叩sa..."
+
+#: wb_frame.py:126
+msgid "Locks held in Working Copy"
+msgstr "Munkap辿ld叩ny z叩rva tart叩sa"
+
+#: wb_frame.py:127
+msgid "Repository Locks..."
+msgstr "T叩rol坦 z叩r叩sa..."
+
+#: wb_frame.py:127
+msgid "Locks held in Repository"
+msgstr "T叩rol坦 z叩rva tart叩sa"
+
+#: wb_frame.py:129
+msgid "Changes..."
+msgstr "V叩ltoz叩sok..."
+
+#: wb_frame.py:129
+msgid "Changes available for checkin"
+msgstr "Vテ。ltozテ。sok hasznテ。lata ellenナ喪zテゥshez"
+
+#: wb_frame.py:130
+msgid "Updates..."
+msgstr "Friss鱈t辿s..."
+
+#: wb_frame.py:130
+msgid "Updates available in the Repository"
+msgstr "Friss鱈t辿sek haszn叩lata a t叩rol坦ban"
+
+#: wb_frame.py:131
+msgid "Branch changes..."
+msgstr "Branch cser辿je"
+
+#: wb_frame.py:131
+msgid "Files changed in this branch"
+msgstr "F叩jlok cser辿je ebben a branchban"
+
+#: wb_frame.py:134
+msgid "Show &Controlled files"
+msgstr "&Ellenナ喪zテカtt fテ。jlok mutatテ。sa"
+
+#: wb_frame.py:134
+msgid "Show Controlled files"
+msgstr "Ellenナ喪zテカtt fテ。jlok mutatテ。sa"
+
+#: wb_frame.py:135
+msgid "Show &Uncontrolled files"
+msgstr "Ellenナ喪izetlen fテ。jlok mutatテ。sa"
+
+#: wb_frame.py:135
+msgid "Show Uncontrolled files"
+msgstr "Ellenナ喪izetlen fテ。jlok mutatテ。sa"
+
+#: wb_frame.py:136
+msgid "Show &Ignored files"
+msgstr "Kihagyott f叩jlok mutat叩sa"
+
+#: wb_frame.py:136
+msgid "Show ignored files"
+msgstr "Kihagyott f叩jlok mutat叩sa"
+
+#: wb_frame.py:137
+msgid "Show &Only changed files"
+msgstr "Csak a m坦dos鱈tott f叩jlok mutat叩sa"
+
+#: wb_frame.py:137
+msgid "Filter out unchanged files"
+msgstr "Filter kikapcsol叩sa a nem v叩ltozott f叩jlokn叩l"
+
+#: wb_frame.py:139
+msgid "Show &Recursive files"
+msgstr "Rekurz鱈v f叩jlok mutat叩sa"
+
+#: wb_frame.py:139
+msgid "Show recursive files"
+msgstr "Rekurz鱈v f叩jlok mutat叩sa"
+
+#: wb_frame.py:141
+msgid "Use WorkBench Diff"
+msgstr "WorkBench 旦sszehasonl鱈t坦 haszn叩lata"
+
+#: wb_frame.py:142
+msgid "Use External GUI Diff"
+msgstr "Kテシlsナ_ GUI テカsszehasonlテュtテウ hasznテ。lata"
+
+#: wb_frame.py:143
+msgid "Use External Text Diff"
+msgstr "Sz旦veges 旦sszehasonl鱈t坦 haszn叩lata"
+
+#: wb_frame.py:144
+msgid "Use SVN Diff"
+msgstr "SVN 旦sszehasonl鱈t坦 haszn叩lata"
+
+#: wb_frame.py:146
+msgid "&Refresh\tF5"
+msgstr "Friss鱈t辿s\tF5"
+
+#: wb_frame.py:146
+msgid "Refresh display"
+msgstr "Kテゥpernyナ_ frissテュtテゥse"
+
+#: wb_frame.py:147
+msgid "&Automatic Refresh"
+msgstr "&Automatikus friss鱈t辿s"
+
+#: wb_frame.py:147
+msgid "Automatic refresh"
+msgstr "Automatikus friss鱈t辿s"
+
+#: wb_frame.py:157
+msgid "Add Bookmark"
+msgstr "Kテカnyvjelzナ_ hozzテ。adテ。sa"
+
+#: wb_frame.py:158
+msgid "Manage..."
+msgstr "Int辿z..."
+
+#: wb_frame.py:164
+#: wb_subversion_tree_handler.py:195
+msgid "Add..."
+msgstr "Hozz叩ad..."
+
+#: wb_frame.py:164
+msgid "Project Add"
+msgstr "Projekt hozz叩ad叩sa"
+
+#: wb_frame.py:165
+msgid "Settings..."
+msgstr "Be叩ll鱈t叩sok..."
+
+#: wb_frame.py:165
+#: wb_project_dialogs.py:303
+#: wb_tree_panel.py:574
+msgid "Project Settings"
+msgstr "Projekt be叩ll鱈t叩sok"
+
+#: wb_frame.py:167
+#: wb_tree_panel.py:575
+#: wb_tree_panel.py:616
+msgid "Delete Project"
+msgstr "Projekt t旦rl辿se"
+
+#: wb_frame.py:170
+msgid "&About..."
+msgstr "&N辿vjegy"
+
+#: wb_frame.py:170
+msgid "About the application"
+msgstr "Alkalmaz叩s n辿vjegye"
+
+#: wb_frame.py:174
+msgid "&File"
+msgstr "F叩jl"
+
+#: wb_frame.py:175
+msgid "&Edit"
+msgstr "Szerkeszt辿s"
+
+#: wb_frame.py:176
+msgid "&View"
+msgstr "N辿zet"
+
+#: wb_frame.py:177
+#: wb_subversion_checkin.py:60
+#: wb_subversion_report_branch_changes.py:40
+#: wb_subversion_report_lock.py:48
+#: wb_subversion_report_revision_changes.py:55
+#: wb_subversion_report_updates.py:51
+msgid "&Actions"
+msgstr "M撤velet"
+
+#: wb_frame.py:178
+msgid "&Reports"
+msgstr "Besz叩mol坦"
+
+#: wb_frame.py:179
+msgid "&Bookmarks"
+msgstr "Kテカnyvjelzナ_"
+
+#: wb_frame.py:180
+msgid "&Project"
+msgstr "Projekt"
+
+#: wb_frame.py:181
+msgid "&Help"
+msgstr "S炭g坦"
+
+#: wb_frame.py:198
+msgid "Work Bench"
+msgstr "Work Bench"
+
+#: wb_frame.py:200
+#: wb_frame.py:483
+#: wb_subversion_checkin.py:257
+#: wb_subversion_list_handler_common.py:704
+#: wb_subversion_list_handler_common.py:737
+#: wb_subversion_list_handler_common.py:773
+#: wb_subversion_list_handler_common.py:821
+#: wb_subversion_list_handler_common.py:868
+#: wb_subversion_list_handler_common.py:906
+#: wb_subversion_list_handler_common.py:951
+#: wb_subversion_list_handler_common.py:1017
+#: wb_subversion_list_handler.py:467
+#: wb_subversion_list_handler.py:520
+#: wb_subversion_report_revision_changes.py:143
+#: wb_subversion_report_revision_changes.py:180
+#: wb_subversion_report_revision_changes.py:219
+#: wb_subversion_report_updates.py:159
+#: wb_subversion_tree_handler.py:244
+#: wb_subversion_tree_handler.py:282
+#: wb_subversion_tree_handler.py:296
+#: wb_subversion_tree_handler.py:325
+#: wb_subversion_tree_handler.py:348
+#: wb_subversion_tree_handler.py:416
+#: wb_subversion_tree_handler.py:451
+#: wb_subversion_tree_handler.py:490
+#: wb_subversion_tree_handler.py:629
+#: wb_subversion_tree_handler.py:672
+#: wb_subversion_tree_handler.py:779
+#: wb_subversion_tree_handler.py:894
+msgid "Ready"
+msgstr "K辿sz"
+
+#: wb_frame.py:465
+#, python-format
+msgid "Work Bench version: %s"
+msgstr "Work Bench verzi坦: %s"
+
+#: wb_frame.py:469
+msgid ""
+"\n"
+"Copyright Barry Scott (c) 2003-2009. All rights reserved"
+msgstr ""
+"\n"
+"Copyright Barry Scott (C) 2003-2009. Minden jog fenntartva!"
+
+#: wb_frame.py:673
+#, python-format
+msgid "Adding bookmark to %s"
+msgstr "Kテカnyvjelzナ_ hozzテ。adテ。sa %s"
+
+#: wb_list_panel_common.py:108
+#: wb_list_panel_common.py:511
+#: wb_subversion_list_handler_common.py:31
+#: wb_subversion_list_handler_common.py:110
+#: wb_subversion_list_handler_common.py:243
+#: wb_subversion_report_branch_changes.py:147
+#: wb_subversion_report_lock.py:183
+#: wb_subversion_report_revision_changes.py:266
+#: wb_subversion_report_updates.py:205
+msgid "Name"
+msgstr "N辿v"
+
+#: wb_list_panel_common.py:511
+#: wb_subversion_annotate.py:59
+#: wb_subversion_history.py:71
+#: wb_subversion_history.py:377
+#: wb_subversion_history.py:503
+#: wb_subversion_list_handler_common.py:35
+#: wb_subversion_list_handler_common.py:114
+#: wb_subversion_list_handler_common.py:246
+msgid "Author"
+msgstr "Szerzナ_"
+
+#: wb_preferences_dialog.py:32
+msgid "PreferencesDialog"
+msgstr "Be叩ll鱈t叩sok p叩rbesz辿d"
+
+#: wb_preferences_dialog.py:106
+msgid "Editor"
+msgstr "Szerkesztナ_"
+
+#: wb_preferences_dialog.py:111
+msgid "Editor: "
+msgstr "Szerkesztナ_"
+
+#: wb_preferences_dialog.py:114
+msgid "Edit Arguments: "
+msgstr "Szerkesztナ_ paramテゥterei:"
+
+#: wb_preferences_dialog.py:117
+#: wb_preferences_dialog.py:210
+#: wb_project_dialogs.py:58
+#: wb_project_dialogs.py:87
+#: wb_project_dialogs.py:477
+#: wb_project_dialogs.py:636
+msgid " Browse... "
+msgstr " Keres..."
+
+#: wb_preferences_dialog.py:143
+#: wb_preferences_dialog.py:267
+msgid "Executable files (*.exe)|*.exe"
+msgstr "V辿grehajthat坦 f叩jlok (*.exe)|*.exe"
+
+#: wb_preferences_dialog.py:145
+#: wb_preferences_dialog.py:269
+msgid "Applications|*.app|Executable files|*"
+msgstr "Alkalmaz叩sok|*.app|V辿grehajthat坦 f叩jlok|*"
+
+#: wb_preferences_dialog.py:147
+#: wb_preferences_dialog.py:271
+msgid "Executable files|*"
+msgstr "V辿grehajthat坦 f叩jlok|*"
+
+#: wb_preferences_dialog.py:152
+#: wb_preferences_dialog.py:276
+msgid "Choose an Executable file"
+msgstr "V辿grehajthat坦 f叩jl v叩laszt叩sa"
+
+#: wb_preferences_dialog.py:182
+msgid "You must enter a valid editor executable"
+msgstr "テ詠vテゥnyes szerkesztナ_ megadテ。sa szテシksテゥges"
+
+#: wb_preferences_dialog.py:183
+#: wb_preferences_dialog.py:573
+#: wb_preferences_dialog.py:584
+#: wb_preferences_dialog.py:631
+#: wb_preferences_dialog.py:644
+#: wb_preferences_dialog.py:695
+#: wb_preferences_dialog.py:761
+#: wb_preferences_dialog.py:773
+#: wb_preferences_dialog.py:968
+#: wb_subversion_checkin.py:314
+#: wb_subversion_list_handler.py:224
+#: wb_subversion_list_handler.py:464
+#: wb_subversion_list_handler.py:517
+#: wb_subversion_properties_dialog.py:93
+#: wb_subversion_properties_dialog.py:114
+#: wb_subversion_tree_handler.py:355
+#: wb_subversion_tree_handler.py:637
+#: wb_subversion_tree_handler.py:640
+#: wb_subversion_tree_handler.py:669
+#: wb_subversion_tree_handler.py:815
+#: wb_subversion_tree_handler.py:891
+msgid "Warning"
+msgstr "Vigy叩zat"
+
+#: wb_preferences_dialog.py:193
+msgid "Diff Tool"
+msgstr "テ穆szehasonlテュtテウ eszkテカz"
+
+#: wb_preferences_dialog.py:201
+msgid "Work Bench Diff"
+msgstr "Work Bench 旦sszehasonl鱈t坦"
+
+#: wb_preferences_dialog.py:201
+msgid "External GUI Diff Command"
+msgstr "Kテシlsナ_ GUI テカsszehasonlテュtテウ parancs"
+
+#: wb_preferences_dialog.py:201
+msgid "External Text Diff"
+msgstr "Kテシlsナ_ szテカveges テカsszehasonlテュtテウ"
+
+#: wb_preferences_dialog.py:201
+msgid "SVN diff"
+msgstr "SVN 旦sszehasonl鱈t坦"
+
+#: wb_preferences_dialog.py:215
+msgid "Mode: "
+msgstr "M坦dszer:"
+
+#: wb_preferences_dialog.py:219
+msgid "Diff Tool: "
+msgstr "テ穆szehasonlテュtテウ eszkテカz:"
+
+#: wb_preferences_dialog.py:223
+msgid "Tool Arguments: "
+msgstr "Eszk旦z param辿terei:"
+
+#: wb_preferences_dialog.py:227
+msgid "Use"
+msgstr "Alkalmaz叩s"
+
+#: wb_preferences_dialog.py:228
+msgid ""
+"%nl for left file name, %nr for right file name,\n"
+"%tl for left title, %tr for right title"
+msgstr ""
+"%nl bal oldali f叩jln辿v, %nr jobb  oldali f叩jl n辿v,\n"
+"%tl for bal oldali c鱈m, %tr jobb oldali c鱈m"
+
+#: wb_preferences_dialog.py:293
+msgid "Shell"
+msgstr "Keret"
+
+#: wb_preferences_dialog.py:298
+msgid "Terminal Init Command: "
+msgstr "Termin叩l ind鱈t坦 parancs:"
+
+#: wb_preferences_dialog.py:306
+msgid "Terminal Program: "
+msgstr "Terminal program: "
+
+#: wb_preferences_dialog.py:323
+msgid "File Browser Program: "
+msgstr "Fテ。jl keresナ_ program: "
+
+#: wb_preferences_dialog.py:358
+msgid "View"
+msgstr "N辿zet"
+
+#: wb_preferences_dialog.py:366
+msgid "Exclude filename"
+msgstr "Kihagyott f叩jln辿v"
+
+#: wb_preferences_dialog.py:372
+msgid " Add "
+msgstr " Hozz叩ad"
+
+#: wb_preferences_dialog.py:484
+msgid "Columns"
+msgstr "Oszlopok"
+
+#: wb_preferences_dialog.py:492
+#: wb_preferences_dialog.py:499
+msgid "Column"
+msgstr "Oszlop"
+
+#: wb_preferences_dialog.py:494
+#: wb_preferences_dialog.py:501
+msgid "Width"
+msgstr "Sz辿less辿g"
+
+#: wb_preferences_dialog.py:519
+#: wb_preferences_dialog.py:818
+msgid " Include --> "
+msgstr "Tartalmaz --> "
+
+#: wb_preferences_dialog.py:521
+#: wb_preferences_dialog.py:820
+msgid " <-- Exclude "
+msgstr " <-- Kihagy"
+
+#: wb_preferences_dialog.py:524
+#: wb_preferences_dialog.py:823
+msgid " Move Up "
+msgstr "Felfel辿"
+
+#: wb_preferences_dialog.py:526
+#: wb_preferences_dialog.py:825
+msgid " Move Down "
+msgstr "Lefel辿"
+
+#: wb_preferences_dialog.py:571
+#: wb_preferences_dialog.py:629
+#, python-format
+msgid "Width for %(name)s must be an number between %(min)d and %(max)d"
+msgstr "Sz辿less辿g 辿rt辿ke %(name)s egy %(min)d 辿s %(max)d k旦z旦tti sz叩m kell legyen"
+
+#: wb_preferences_dialog.py:582
+#: wb_preferences_dialog.py:642
+#, python-format
+msgid "Width for %(name)s must be between %(min)d and %(max)d"
+msgstr "Sz辿less辿g 辿rt辿ke %(name)s %(min)d 辿s %(max)d k旦z旦tt kell legyen"
+
+#: wb_preferences_dialog.py:694
+msgid "You must include the Name column"
+msgstr "Sz端ks辿ges tartalmaznia az oszlop nev辿t"
+
+#: wb_preferences_dialog.py:705
+#: wb_subversion_history.py:183
+msgid "Log History"
+msgstr "Naplテウ elナ想mテゥnyek"
+
+#: wb_preferences_dialog.py:711
+#: wb_subversion_history.py:194
+msgid "Show all entries"
+msgstr "テ穆sze bejegyzテゥs mutatテ。sa"
+
+#: wb_preferences_dialog.py:711
+msgid "Show only"
+msgstr "Csak mutassa"
+
+#: wb_preferences_dialog.py:711
+msgid "Show since"
+msgstr "Mutat onnant坦l"
+
+#: wb_preferences_dialog.py:712
+msgid "Default mode: "
+msgstr "Alaphelyzet:"
+
+#: wb_preferences_dialog.py:716
+msgid "Default limit: "
+msgstr "Alap辿rt辿k:"
+
+#: wb_preferences_dialog.py:719
+msgid "Default since interval (days): "
+msgstr "Eltelt idナ奏artam napokban:"
+
+#: wb_preferences_dialog.py:722
+msgid "Default Include tags: "
+msgstr "Alap辿rtelmezett tag:"
+
+#: wb_preferences_dialog.py:723
+#: wb_subversion_history.py:222
+msgid "Include tags in log history"
+msgstr "Tagek az elナ想mテゥnyek naplテウban"
+
+#: wb_preferences_dialog.py:760
+msgid "Limit must be greater then 0"
+msgstr "Nagyobb kell legyen az 辿rt辿k, mint 0"
+
+#: wb_preferences_dialog.py:772
+msgid "Since days must be greater then 0"
+msgstr "Eltelt napok 辿rt辿ke nagyobb, mint 0"
+
+#: wb_preferences_dialog.py:791
+msgid "Toolbar"
+msgstr "Eszk旦zt叩r"
+
+#: wb_preferences_dialog.py:800
+#: wb_preferences_dialog.py:805
+msgid "Toolbar Group"
+msgstr "Eszk旦zt叩r csoport"
+
+#: wb_preferences_dialog.py:829
+msgid "Display toolbar: "
+msgstr "Eszk旦zt叩r megjelen鱈t辿se:"
+
+#: wb_preferences_dialog.py:830
+msgid "Enabled"
+msgstr "Enged辿lyezett"
+
+#: wb_preferences_dialog.py:832
+msgid "Orientation: "
+msgstr "Ir叩nyults叩g:"
+
+#: wb_preferences_dialog.py:833
+msgid "Horizontal"
+msgstr "V鱈zszintes"
+
+#: wb_preferences_dialog.py:833
+msgid "Vertical"
+msgstr "Fテシggナ鼠eges"
+
+#: wb_preferences_dialog.py:839
+msgid "Small"
+msgstr "Kicsi"
+
+#: wb_preferences_dialog.py:839
+msgid "Large"
+msgstr "Nagy"
+
+#: wb_preferences_dialog.py:839
+msgid "Huge"
+msgstr "Hatalmas"
+
+#: wb_preferences_dialog.py:841
+msgid "Icon size: "
+msgstr "Ikon m辿rete:"
+
+#: wb_preferences_dialog.py:967
+msgid "You must include at least one Toolbar group"
+msgstr "Legal叩bb egy eszk旦zt叩r csoportot kell tartalmazni"
+
+#: wb_preferences_dialog.py:978
+msgid "Advanced"
+msgstr "Halad坦"
+
+#: wb_preferences_dialog.py:985
+msgid "Allow arbitrary paths for tag/branch"
+msgstr "テ墨kテゥnyes テコtvonalak megengedテゥse tag/branch-テゥrt"
+
+#: wb_preferences.py:117
+#, python-format
+msgid "Wrote preferences to %s"
+msgstr "Tulajdons叩gok 鱈r叩sa ide %s"
+
+#: wb_preferences.py:127
+#: wb_preferences.py:130
+#, python-format
+msgid "Reading preferences from %s"
+msgstr "Tulajdons叩gok kiolvas叩sa innen %s"
+
+#: wb_project_dialogs.py:48
+msgid "Project"
+msgstr "Projekt"
+
+#: wb_project_dialogs.py:52
+msgid "Project Name:"
+msgstr "Projekt neve:"
+
+#: wb_project_dialogs.py:60
+#: wb_project_dialogs.py:475
+#: wb_project_dialogs.py:634
+#: wb_project_dialogs.py:744
+msgid "Working copy Path:"
+msgstr "Munkap辿ld叩ny 炭tvonal:"
+
+#: wb_project_dialogs.py:67
+msgid "Subversion Trunk URL:"
+msgstr "Subversion t旦rzs URL:"
+
+#: wb_project_dialogs.py:73
+msgid "Subversion Tags URL:"
+msgstr "Subversion tagek URL:"
+
+#: wb_project_dialogs.py:79
+msgid "Subversion Branches URL:"
+msgstr "Subversion branch URL:"
+
+#: wb_project_dialogs.py:85
+msgid "New File Template Folder: "
+msgstr "テ嗚 fテ。jl sablon dossziテゥ:"
+
+#: wb_project_dialogs.py:93
+msgid "Background Colour: "
+msgstr "H叩tt辿rsz鱈n:"
+
+#: wb_project_dialogs.py:94
+msgid "Use custom background colour"
+msgstr "Saj叩t h叩tt辿rsz鱈n haszn叩lata"
+
+#: wb_project_dialogs.py:95
+msgid "Example"
+msgstr "P辿ld叩ul"
+
+#: wb_project_dialogs.py:96
+msgid " Pick Colour... "
+msgstr " Sz鱈n kijel旦l辿se..."
+
+#: wb_project_dialogs.py:185
+msgid "Enter a project name"
+msgstr "Proekt n辿v megad叩sa"
+
+#: wb_project_dialogs.py:189
+#, python-format
+msgid "Project %s already exist. Choose another name"
+msgstr "Projket %s m叩r l辿tezik. V叩laszon m叩sik nevet."
+
+#: wb_project_dialogs.py:195
+msgid "Enter a Subversion trunk URL"
+msgstr "Subversion t旦rzs URL megad叩sa"
+
+#: wb_project_dialogs.py:199
+#, python-format
+msgid "%s is not a valid Subversion trunk URL"
+msgstr "%s nem egy 辿rv辿nyes Subversion t旦rzs URL"
+
+#: wb_project_dialogs.py:205
+#: wb_project_dialogs.py:211
+#, python-format
+msgid "%s is not a valid Subversion tags URL"
+msgstr "%s nem egy 辿rv辿nyes Subversion tag URL"
+
+#: wb_project_dialogs.py:216
+msgid "Enter a Working copy path"
+msgstr "Munkap辿ld叩ny 炭tvonal megad叩sa"
+
+#: wb_project_dialogs.py:228
+#: wb_project_dialogs.py:538
+#: wb_project_dialogs.py:714
+msgid "Select Working Copy directory"
+msgstr "Munkap辿ld叩ny k旦nyvt叩r megad叩sa"
+
+#: wb_project_dialogs.py:247
+msgid "Select New File Template directory"
+msgstr "テ嗚 fテ。jl sablon kテカnyvtテ。r kivテ。lasztテ。sa"
+
+#: wb_project_dialogs.py:347
+msgid "Add Project"
+msgstr "Projekt hozz叩ad叩sa"
+
+#: wb_project_dialogs.py:444
+msgid "Working Copy"
+msgstr "Munkap辿ld叩ny"
+
+#: wb_project_dialogs.py:445
+msgid " Use new working copy directory "
+msgstr " テ嗚 munkapテゥldテ。ny kテカnyvtテ。r hasznテ。lata"
+
+#: wb_project_dialogs.py:446
+msgid " Use existing Working copy directory "
+msgstr "  Meglテゥvナ_ munkapテゥldテ。ny kテカnyvtテ。r hasznテ。lata"
+
+#: wb_project_dialogs.py:470
+msgid "Select Working Copy"
+msgstr "Munkap辿ld叩ny kiv叩laszt叩sa"
+
+#: wb_project_dialogs.py:487
+#: wb_project_dialogs.py:583
+#: wb_project_dialogs.py:646
+#: wb_project_dialogs.py:751
+msgid "Subversion URL:"
+msgstr "Subversion URL:"
+
+#: wb_project_dialogs.py:512
+#, python-format
+msgid ""
+"Path %s\n"
+"Does not exist\n"
+"Choose an existing subversion working copy directory"
+msgstr ""
+"テ嗾vonal %s\n"
+"Nem l辿tezik\n"
+"Vテ。laszon egy lテゥtezナ_ Subversion munkapテゥldテ。ny kテカnyvtテ。rat"
+
+#: wb_project_dialogs.py:519
+#, python-format
+msgid ""
+"Path %s\n"
+"Is not a directory\n"
+"Choose an existing subversion working copy directory"
+msgstr ""
+"テ嗾vonal %s\n"
+"ez nem egy k旦nyvt叩r\n"
+"Vテ。laszon egy lテゥtezナ_ Subversion munkapテゥldテ。ny kテカnyvtテ。rat"
+
+#: wb_project_dialogs.py:526
+#, python-format
+msgid ""
+"Path %s\n"
+"Is not a subversion working copy\n"
+"Choose an existing subversion working copy directory"
+msgstr ""
+"テ嗾vonal %s\n"
+"ez nem egy lテゥtezナ_ Subversion munkapテゥldテ。ny\n"
+"Vテ。laszon egy lテゥtezナ_ Subversion munkapテゥldテ。ny kテカnyvtテ。rat"
+
+#: wb_project_dialogs.py:577
+msgid "Select Subversion URL"
+msgstr "Subversion URL v叩laszt叩sa"
+
+#: wb_project_dialogs.py:603
+msgid "Enter a Subversion URL"
+msgstr "Subversion URL megad叩sa"
+
+#: wb_project_dialogs.py:607
+#, python-format
+msgid "%s is not a valid Subversion URL"
+msgstr "%s nem egy 辿rv辿nyes Subversion URL"
+
+#: wb_project_dialogs.py:615
+#, python-format
+msgid ""
+"%(url)s is not a accessable Subversion URL\n"
+"%(error)s"
+msgstr ""
+"%(url)s nem egy hozzテ。fテゥrhetナ_ Subversion URL\n"
+"%(error)s"
+
+#: wb_project_dialogs.py:628
+msgid "Create new Working Copy"
+msgstr "テ嗚 munkapテゥldテ。ny kテゥszテュtテゥse"
+
+#: wb_project_dialogs.py:664
+msgid "Choose a directory that is empty and not in used by subversion"
+msgstr "V叩lasszon egy k旦nyvt叩rat, amely 端res 辿s nem haszn叩lja a Subversion"
+
+#: wb_project_dialogs.py:670
+#, python-format
+msgid ""
+"Path %s\n"
+"Is not a directory\n"
+"Choose a directory that is empty and not in use by subversion"
+msgstr ""
+"テ嗾vonal %s\n"
+"ez nem egy k旦nyvt叩r\n"
+"V叩lasszon egy k旦nyvt叩rat, amely 端res 辿s nem haszn叩lja a Subversion"
+
+#: wb_project_dialogs.py:678
+#, python-format
+msgid ""
+"Path %s\n"
+"Is a subversion working copy\n"
+"Choose a directory that is empty and not in use by subversion"
+msgstr ""
+"テ嗾vonal %s\n"
+"ez egy Subversion munkap辿ld叩ny\n"
+"V叩lasszon egy k旦nyvt叩rat, amely 端res 辿s nem haszn叩lja a Subversion"
+
+#: wb_project_dialogs.py:691
+#, python-format
+msgid ""
+"Path %s\n"
+"Is not an empty directory\n"
+"Choose a directory that is empty and not in use by subversion"
+msgstr ""
+"テ嗾vonal %s\n"
+"ez nem egy 端res k旦nyvt叩r\n"
+"V叩lasszon egy k旦nyvt叩rat, amely 端res 辿s nem haszn叩lja a Subversion"
+
+#: wb_project_dialogs.py:700
+#, python-format
+msgid ""
+"Path %(path)s\n"
+"%(error)s\n"
+"Choose a directory that is empty and not in use by subversion"
+msgstr ""
+"テ嗾vonal %(path)s\n"
+"%(error)s\n"
+"V叩lasszon egy k旦nyvt叩rat, amely 端res 辿s nem haszn叩lja a Subversion"
+
+#: wb_project_dialogs.py:727
+msgid "Project Name"
+msgstr "Projekt neve"
+
+#: wb_project_dialogs.py:733
+msgid "Project name:"
+msgstr "Projekt neve"
+
+#: wb_project_dialogs.py:768
+msgid ""
+"Project name is blank.\n"
+"Enter a project name"
+msgstr ""
+"Projekt neve nincs kit旦ltve.\n"
+"Adja meg a nevet"
+
+#: wb_project_dialogs.py:774
+#, python-format
+msgid ""
+"Project %s already exist.\n"
+"Choose another name"
+msgstr ""
+"Projekt neve %s m叩r l辿tezik.\n"
+"V叩lasszon m叩sik nevet"
+
+#: wb_shell_macosx_commands.py:58
+#: wb_shell_unix_commands.py:51
+#: wb_shell_win32_commands.py:53
+#, python-format
+msgid "Open %s"
+msgstr "Megnyit叩s %s"
+
+#: wb_shell_win32_commands.py:61
+#, python-format
+msgid ""
+"Unable to shell open %s\n"
+"Is an application associated with this file type?"
+msgstr ""
+"Termin叩l nem nyithat坦 meg %s\n"
+"Van egy alkalmaz叩s rendelve ehhez a f叩jl t鱈pushoz?"
+
+#: wb_shell_win32_commands.py:64
+#, python-format
+msgid "Unable to shell open %(filename)s - %(error)s"
+msgstr "Termin叩l nem nyithat坦 meg %(filename)s - %(error)s"
+
+#: wb_shell_win32_commands.py:122
+#, python-format
+msgid ""
+"Create process failed for command - %(command)s\n"
+"Reason %(reason)s"
+msgstr ""
+"Sikertelen parancs - %(command)s\n"
+"Indok %(reason)s"
+
+#: wb_shell_win32_commands.py:131
+#, python-format
+msgid "Created directory %s"
+msgstr "K旦nyvt叩r l辿trehoz叩sa %s"
+
+#: wb_shell_win32_commands.py:134
+#, python-format
+msgid "Create directory %(dir)s - %(error)s"
+msgstr "K旦nyvt叩r l辿trehoz叩sa %(dir)s - %(error)s"
+
+#: wb_shell_win32_commands.py:140
+#, python-format
+msgid "%s is not a directory"
+msgstr "%s nem egy k旦nyvt叩r"
+
+#: wb_subversion_annotate.py:23
+#, python-format
+msgid "Annotation of %s"
+msgstr "Jegyzet %s"
+
+#: wb_subversion_annotate.py:57
+msgid "Line"
+msgstr "Sor"
+
+#: wb_subversion_annotate.py:58
+#: wb_subversion_history.py:502
+msgid "Revision"
+msgstr "Rev鱈zi坦"
+
+#: wb_subversion_annotate.py:60
+#: wb_subversion_history.py:504
+#: wb_subversion_list_handler_common.py:33
+#: wb_subversion_list_handler_common.py:112
+msgid "Date"
+msgstr "D叩tum"
+
+#: wb_subversion_annotate.py:61
+msgid "Text"
+msgstr "Sz旦veg"
+
+#: wb_subversion_checkin.py:33
+#, python-format
+msgid "Check in for %s"
+msgstr "Ellenナ喪zテゥs itt: %s"
+
+#: wb_subversion_checkin.py:54
+msgid "Select All"
+msgstr "テ穆szes kivテ。lasztテ。sa"
+
+#: wb_subversion_checkin.py:54
+msgid "Select ALl"
+msgstr "テ穆szes kivテ。lasztテ。sa"
+
+#: wb_subversion_checkin.py:56
+#: wb_subversion_report_updates.py:47
+msgid "Exclude..."
+msgstr "Kihagy..."
+
+#: wb_subversion_checkin.py:56
+#: wb_subversion_checkin.py:97
+#: wb_subversion_report_updates.py:70
+msgid "Exclude from check in"
+msgstr "Kizテ。rva az ellenナ喪zテゥsbナ鼠"
+
+#: wb_subversion_checkin.py:57
+#: wb_subversion_report_updates.py:48
+msgid "Include..."
+msgstr "Tartalmaz..."
+
+#: wb_subversion_checkin.py:57
+msgid "Include from check in"
+msgstr "Beleテゥrtve az ellenナ喪zテゥsbe"
+
+#: wb_subversion_checkin.py:72
+#: wb_toolbars.py:98
+msgid "Edit File"
+msgstr "F叩jl szerkeszt辿se"
+
+#: wb_subversion_checkin.py:76
+#: wb_toolbars.py:101
+msgid "Open File"
+msgstr "F叩jl megnyit叩sa"
+
+#: wb_subversion_checkin.py:80
+#: wb_toolbars.py:104
+msgid "Diff changes against base"
+msgstr "V叩ltoz叩sok 旦sszehasonl鱈t叩sa a b叩zisban"
+
+#: wb_subversion_checkin.py:83
+#: wb_subversion_report_branch_changes.py:55
+#: wb_subversion_report_lock.py:63
+#: wb_subversion_report_revision_changes.py:70
+#: wb_subversion_report_updates.py:66
+#: wb_toolbars.py:107
+msgid "Show History log"
+msgstr "Elナ想mテゥnyek mutatテ。sa"
+
+#: wb_subversion_checkin.py:86
+#: wb_subversion_report_branch_changes.py:58
+#: wb_subversion_report_lock.py:66
+#: wb_subversion_report_revision_changes.py:73
+#: wb_toolbars.py:110
+msgid "File Information"
+msgstr "F叩jl inform叩ci坦"
+
+#: wb_subversion_checkin.py:89
+#: wb_toolbars.py:113
+msgid "File Properties"
+msgstr "F叩jl tulajdons叩gok"
+
+#: wb_subversion_checkin.py:93
+#: wb_toolbars.py:122
+msgid "Revert selected Files and Folders"
+msgstr "F叩jlok 辿s k旦nyvt叩rak kiv叩laszt叩s叩nak visszavon叩sa"
+
+#: wb_subversion_checkin.py:100
+#: wb_subversion_report_updates.py:73
+msgid "Include in check in"
+msgstr "Beleテゥrtve az ellenナ喪zテゥsbe"
+
+#: wb_subversion_checkin.py:136
+msgid " Check In "
+msgstr "r"
+
+#: wb_subversion_checkin.py:242
+#, python-format
+msgid "Check in %s..."
+msgstr "Ellenナ喪zテゥs %s..."
+
+#: wb_subversion_checkin.py:243
+#, python-format
+msgid "Sent %(count)d of %(total)d"
+msgstr "Kテシldテゥs %(count)d, ennyibナ鼠 %(total)d"
+
+#: wb_subversion_checkin.py:265
+#, python-format
+msgid "Checkin created revision %d"
+msgstr "Ellenナ喪zテゥs kテゥszテュtett revテュziテウ %d"
+
+#: wb_subversion_checkin.py:267
+msgid "No changes to checkin "
+msgstr "Nincsenek cserテゥk az elleナ喪zテゥshez"
+
+#: wb_subversion_checkin.py:272
+msgid "Post commit error"
+msgstr "Bek端ld辿s ut叩ni hiba"
+
+#: wb_subversion_checkin.py:313
+#: wb_subversion_list_handler.py:223
+#: wb_subversion_tree_handler.py:354
+msgid "There are no changes to check in"
+msgstr "Nincsenek cserテゥk az ellenナ喪zテゥshez"
+
+#: wb_subversion_history.py:73
+#: wb_subversion_history.py:377
+#: wb_subversion_history.py:467
+#: wb_subversion_history.py:534
+msgid "Comment"
+msgstr "Megjegyz辿s"
+
+#: wb_subversion_history.py:75
+#: wb_subversion_history.py:377
+#: wb_subversion_history.py:522
+msgid "Path"
+msgstr "テ嗾vonal"
+
+#: wb_subversion_history.py:200
+msgid "Show only:"
+msgstr "Csak ezt mutassa:"
+
+#: wb_subversion_history.py:211
+msgid "Show since:"
+msgstr "Mutat onnant坦l:"
+
+#: wb_subversion_history.py:221
+msgid "Include tags: "
+msgstr "Tagek:"
+
+#: wb_subversion_history.py:312
+#: wb_subversion_history.py:331
+#, python-format
+msgid "History of %s"
+msgstr "Elナ想mテゥnyek %s"
+
+#: wb_subversion_history.py:505
+msgid "Label"
+msgstr "C鱈mke"
+
+#: wb_subversion_history.py:506
+msgid "Message"
+msgstr "テ忝enet"
+
+#: wb_subversion_history.py:521
+msgid "Action"
+msgstr "M撤velet"
+
+#: wb_subversion_history.py:523
+msgid "Copied Revision"
+msgstr "M叩solva"
+
+#: wb_subversion_history.py:524
+msgid "Copied from"
+msgstr "M叩solva"
+
+#: wb_subversion_history.py:536
+msgid "Changed Paths"
+msgstr "M坦dos鱈tott 炭tvonalak"
+
+#: wb_subversion_history.py:623
+msgid "Diff"
+msgstr "テ穆szehasonlテュtテ。s"
+
+#: wb_subversion_history.py:625
+msgid "Annotate"
+msgstr "Jegyzet"
+
+#: wb_subversion_history.py:627
+msgid "Revision Changes"
+msgstr "V叩ltoz叩sok revizi坦ja"
+
+#: wb_subversion_history.py:724
+msgid "Log history View not implemented"
+msgstr "Naplテウ elナ想mテゥny nテゥzete nem megvalテウsテュthatテウ"
+
+#: wb_subversion_history.py:906
+#, python-format
+msgid "Revision changes for r%(rev1)d ignored. Its URL \"%(url1)s\" does not match r%(rev2)d URL \"%(url2)s\"."
+msgstr "Revテュziテウ cserテゥje r%(rev1)d mellナ想ve. Ez az URL \"%(url1)s\" nem pテ。rja a r%(rev2)d URL-nek \"%(url2)s\"."
+
+#: wb_subversion_info_dialog.py:25
+msgid "Entry"
+msgstr "Bejegyz辿s"
+
+#: wb_subversion_info_dialog.py:26
+msgid "Path:"
+msgstr "テ嗾vonal"
+
+#: wb_subversion_info_dialog.py:58
+#: wb_subversion_info_dialog.py:102
+msgid "URL:"
+msgstr "URL:"
+
+#: wb_subversion_info_dialog.py:60
+msgid "Repository:"
+msgstr "T叩rol坦:"
+
+#: wb_subversion_info_dialog.py:62
+#: wb_subversion_info_dialog.py:106
+msgid "Repository UUID:"
+msgstr "T叩rol坦 UUID:"
+
+#: wb_subversion_info_dialog.py:66
+#: wb_subversion_info_dialog.py:68
+#: wb_subversion_info_dialog.py:70
+#: wb_subversion_info_dialog.py:72
+#: wb_subversion_info_dialog.py:110
+#: wb_subversion_info_dialog.py:112
+#: wb_subversion_info_dialog.py:114
+#: wb_subversion_info_dialog.py:116
+msgid "Node kind:"
+msgstr "Node fajta:"
+
+#: wb_subversion_info_dialog.py:66
+#: wb_subversion_info_dialog.py:110
+msgid "file"
+msgstr "f叩jl"
+
+#: wb_subversion_info_dialog.py:68
+#: wb_subversion_info_dialog.py:112
+msgid "directory"
+msgstr "k旦nyvt叩r"
+
+#: wb_subversion_info_dialog.py:70
+#: wb_subversion_info_dialog.py:114
+msgid "none"
+msgstr "egyik sem"
+
+#: wb_subversion_info_dialog.py:72
+#: wb_subversion_info_dialog.py:116
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: wb_subversion_info_dialog.py:75
+#: wb_subversion_info_dialog.py:77
+#: wb_subversion_info_dialog.py:79
+#: wb_subversion_info_dialog.py:81
+#: wb_subversion_info_dialog.py:143
+#: wb_subversion_info_dialog.py:145
+#: wb_subversion_info_dialog.py:147
+#: wb_subversion_info_dialog.py:149
+#: wb_subversion_info_dialog.py:151
+msgid "Schedule:"
+msgstr "Jegyz辿k:"
+
+#: wb_subversion_info_dialog.py:75
+#: wb_subversion_info_dialog.py:143
+msgid "normal"
+msgstr "norm叩l"
+
+#: wb_subversion_info_dialog.py:77
+#: wb_subversion_info_dialog.py:145
+msgid "add"
+msgstr "hozz叩ad叩s"
+
+#: wb_subversion_info_dialog.py:79
+#: wb_subversion_info_dialog.py:147
+msgid "delete"
+msgstr "t旦rl辿s"
+
+#: wb_subversion_info_dialog.py:81
+#: wb_subversion_info_dialog.py:149
+msgid "replace"
+msgstr "csere"
+
+#: wb_subversion_info_dialog.py:84
+#: wb_subversion_info_dialog.py:153
+msgid "Copied From URL:"
+msgstr "Mテ。solva errナ鼠 az URL-rナ鼠:"
+
+#: wb_subversion_info_dialog.py:86
+#: wb_subversion_info_dialog.py:155
+msgid "Copied From Revision:"
+msgstr "Mテ。solva ebbナ鼠 a revテュziテウbテウl:"
+
+#: wb_subversion_info_dialog.py:88
+#: wb_subversion_info_dialog.py:119
+msgid "Last Changed Author:"
+msgstr "Szerzナ_ utolsテウ vテ。ltozテ。sa:"
+
+#: wb_subversion_info_dialog.py:90
+#: wb_subversion_info_dialog.py:121
+msgid "Last Changed Revision:"
+msgstr "Rev鱈zi坦 utols坦 v叩ltoz叩sa:"
+
+#: wb_subversion_info_dialog.py:92
+#: wb_subversion_info_dialog.py:123
+msgid "Last Changed Date:"
+msgstr "D叩tum utols坦 v叩ltoz叩sa:"
+
+#: wb_subversion_info_dialog.py:94
+#: wb_subversion_info_dialog.py:157
+msgid "Text Last Updated:"
+msgstr "Sz旦veg utols坦 v叩ltoz叩sa:"
+
+#: wb_subversion_info_dialog.py:96
+#: wb_subversion_info_dialog.py:159
+msgid "Properties Last Updated:"
+msgstr "Tulajons叩gok utols坦 v叩ltoz叩sa:"
+
+#: wb_subversion_info_dialog.py:98
+#: wb_subversion_info_dialog.py:161
+msgid "Checksum:"
+msgstr "Ellenテカrzナ_ テカsszeg:"
+
+#: wb_subversion_info_dialog.py:104
+msgid "Repository root URL:"
+msgstr "T叩rol坦 gy旦k辿r URL:"
+
+#: wb_subversion_info_dialog.py:125
+#: wb_subversion_list_handler_common.py:927
+msgid "Lock"
+msgstr "Z叩r叩s"
+
+#: wb_subversion_info_dialog.py:128
+msgid "Lock Owner:"
+msgstr "Z叩r叩s tulajdonosa:"
+
+#: wb_subversion_info_dialog.py:129
+msgid "Lock Creation Date:"
+msgstr "Z叩r叩s k辿sz鱈t辿s d叩tuma:"
+
+#: wb_subversion_info_dialog.py:131
+msgid "Lock Expiration Date:"
+msgstr "Z叩r叩s lej叩rat叩nak d叩tuma:"
+
+#: wb_subversion_info_dialog.py:132
+#: wb_subversion_info_dialog.py:135
+msgid "Lock Token:"
+msgstr "Z叩r叩s jel旦l辿s:"
+
+#: wb_subversion_info_dialog.py:133
+msgid "Lock Comment:"
+msgstr "Z叩r叩s megjegyz辿s:"
+
+#: wb_subversion_info_dialog.py:141
+msgid "Working copy"
+msgstr "Munkap辿ld叩ny"
+
+#: wb_subversion_list_handler_common.py:32
+#: wb_subversion_list_handler_common.py:111
+#: wb_subversion_report_branch_changes.py:147
+#: wb_subversion_report_lock.py:183
+#: wb_subversion_report_revision_changes.py:266
+#: wb_subversion_report_updates.py:205
+msgid "State"
+msgstr "テ〕lapot"
+
+#: wb_subversion_list_handler_common.py:34
+#: wb_subversion_list_handler_common.py:113
+msgid "Rev"
+msgstr "Rev"
+
+#: wb_subversion_list_handler_common.py:37
+#: wb_subversion_list_handler_common.py:117
+msgid "Mimetype"
+msgstr "Mimet鱈pus"
+
+#: wb_subversion_list_handler_common.py:38
+#: wb_subversion_list_handler_common.py:118
+msgid "EOL"
+msgstr "EOL"
+
+#: wb_subversion_list_handler_common.py:39
+#: wb_subversion_list_handler_common.py:115
+msgid "Type"
+msgstr "T鱈pus"
+
+#: wb_subversion_list_handler_common.py:40
+#: wb_subversion_list_handler_common.py:119
+#: wb_subversion_report_lock.py:183
+msgid "Lock Owner"
+msgstr "Z叩r叩s tuljadonosa:"
+
+#: wb_subversion_list_handler_common.py:41
+#: wb_subversion_list_handler_common.py:120
+#: wb_subversion_report_lock.py:183
+msgid "Lock Comment"
+msgstr "Z叩r叩s megjegyz辿s"
+
+#: wb_subversion_list_handler_common.py:116
+msgid "Size"
+msgstr "M辿ret"
+
+#: wb_subversion_list_handler_common.py:348
+msgid "Use the Checkout command to fetch files"
+msgstr "Hasznテ。lja az Ellenナ喪zテゥs parancsot a fテ。jlok elhozテ。sテ。hoz"
+
+#: wb_subversion_list_handler_common.py:350
+msgid "Use the Update command to fetch files"
+msgstr "Haszn叩lja az Friss鱈t parancsot a f叩jlok behoz叩s叩hoz"
+
+#: wb_subversion_list_handler_common.py:682
+#: wb_subversion_report_revision_changes.py:121
+#, python-format
+msgid "Annotating %(count)d"
+msgstr "Jegyzetel辿s %(count)d"
+
+#: wb_subversion_list_handler_common.py:684
+#: wb_subversion_report_revision_changes.py:123
+#, python-format
+msgid "Annotate %s..."
+msgstr "Jegyzet %s..."
+
+#: wb_subversion_list_handler_common.py:708
+#: wb_subversion_tree_handler.py:385
+#, python-format
+msgid "Diff BASE %s..."
+msgstr "テ穆szehasonlテュtテ。s BASE %s..."
+
+#: wb_subversion_list_handler_common.py:743
+#: wb_subversion_tree_handler.py:421
+#, python-format
+msgid "Diff HEAD %s..."
+msgstr "テ穆szehasonlテュtテ。s HEAD %s..."
+
+#: wb_subversion_list_handler_common.py:776
+#: wb_subversion_list_handler_common.py:824
+msgid "Retrieving branch info..."
+msgstr "Branch inform叩ci坦 visszakeres辿se..."
+
+#: wb_subversion_list_handler_common.py:783
+#: wb_subversion_list_handler_common.py:830
+#: wb_subversion_tree_handler.py:772
+#, python-format
+msgid "\"%s\" is not a branch."
+msgstr "\"%s\" nem egy branch"
+
+#: wb_subversion_list_handler_common.py:783
+#: wb_subversion_list_handler_common.py:830
+#: wb_subversion_tree_handler.py:772
+#: wb_subversion_tree_handler.py:774
+msgid "Error"
+msgstr "Hiba"
+
+#: wb_subversion_list_handler_common.py:791
+#, python-format
+msgid "Diff branch origin BASE %s..."
+msgstr "テ穆szehasonlテュtテ。s branch eredeti BASE %s..."
+
+#: wb_subversion_list_handler_common.py:838
+#, python-format
+msgid "Diff branch origin HEAD %s..."
+msgstr "テ穆szehasonlテュtテ。s branch eredeti HEAD %s..."
+
+#: wb_subversion_list_handler_common.py:877
+#: wb_subversion_tree_handler.py:462
+#, python-format
+msgid "Log history %s..."
+msgstr "Elナ想mテゥnyek naplテウ %s..."
+
+#: wb_subversion_list_handler_common.py:932
+#, python-format
+msgid "Locking %(count)d"
+msgstr "Z叩rva %(count)d"
+
+#: wb_subversion_list_handler_common.py:934
+#, python-format
+msgid "Locking %s..."
+msgstr "Z叩rva %s..."
+
+#: wb_subversion_list_handler_common.py:990
+msgid "Unlock"
+msgstr "Nyitva"
+
+#: wb_subversion_list_handler_common.py:995
+#, python-format
+msgid "Unlocking %(count)d"
+msgstr "Nyit叩s %(count)d"
+
+#: wb_subversion_list_handler_common.py:997
+#, python-format
+msgid "Unlocking %s..."
+msgstr "Nyit叩s %s..."
+
+#: wb_subversion_list_handler.py:69
+#: wb_subversion_tree_handler.py:189
+msgid "Update to.."
+msgstr "Friss鱈t辿s..."
+
+#: wb_subversion_list_handler.py:102
+#, python-format
+msgid "Copied %d files to the Clipboard"
+msgstr "%d f叩jl m叩solva a v叩g坦lapra"
+
+#: wb_subversion_list_handler.py:107
+#, python-format
+msgid "Cut %d files to the Clipboard"
+msgstr "%d f叩jlok a v叩g坦lapra v叩gva"
+
+#: wb_subversion_list_handler.py:130
+msgid "Paste Copy"
+msgstr "M叩sol叩s ide"
+
+#: wb_subversion_list_handler.py:132
+msgid "Paste Move"
+msgstr "Mozgat叩s ide"
+
+#: wb_subversion_list_handler.py:148
+msgid "Save As"
+msgstr "Ment辿s m叩sk辿nt"
+
+#: wb_subversion_list_handler.py:158
+#, python-format
+msgid "%(title)s: From %(filename)s"
+msgstr "%(title)s: kor叩bban %(filename)s"
+
+#: wb_subversion_list_handler.py:161
+#, python-format
+msgid "%(title)s:   To %(filename)s"
+msgstr "%(title)s:   lesz %(filename)s"
+
+#: wb_subversion_list_handler.py:242
+msgid "Delete File"
+msgstr "F叩jl t旦rl辿se"
+
+#: wb_subversion_list_handler.py:323
+#: wb_subversion_list_handler.py:353
+#: wb_subversion_list_handler.py:361
+#, python-format
+msgid "Rename %(from)s %(to)s"
+msgstr "テ》nevezテゥs %(from)s %(to)s"
+
+#: wb_subversion_list_handler.py:347
+msgid "Failed to create tmp file for rename"
+msgstr "F叩jl 叩tnevez辿s辿n辿l hiba a tmp f叩jlban"
+
+#: wb_subversion_list_handler.py:410
+msgid "Resolved"
+msgstr "Megoldott"
+
+#: wb_subversion_list_handler.py:424
+#: wb_subversion_list_handler.py:477
+#: wb_subversion_report_updates.py:132
+#: wb_subversion_tree_handler.py:828
+#: wb_subversion_tree_handler.py:844
+#, python-format
+msgid "Updated %(count)d"
+msgstr "Friss鱈tve %(count)d"
+
+#: wb_subversion_list_handler.py:429
+#: wb_subversion_list_handler.py:482
+#: wb_subversion_report_updates.py:131
+#: wb_subversion_tree_handler.py:827
+#: wb_subversion_tree_handler.py:843
+#, python-format
+msgid "Update %s..."
+msgstr "Friss鱈tve %s..."
+
+#: wb_subversion_list_handler.py:451
+#: wb_subversion_list_handler.py:504
+#: wb_subversion_report_updates.py:143
+#: wb_subversion_tree_handler.py:876
+#, python-format
+msgid "Updated %(filename)s to revision %(rev)d, no new updates"
+msgstr "Friss鱈tve %(filename)s a rev鱈zi坦ra %(rev)d, nincs 炭jabb v叩ltozat"
+
+#: wb_subversion_list_handler.py:455
+#: wb_subversion_list_handler.py:508
+#: wb_subversion_report_updates.py:147
+#: wb_subversion_tree_handler.py:880
+#, python-format
+msgid "Updated %(filename)s to revision %(rev)d, %(count)d new update"
+msgid_plural "Updated %(filename)s to revision %(rev)d, %(count)d new updates"
+msgstr[0] "Friss鱈tve %(filename)s a rev鱈zi坦ra %(rev)d, %(count)d 炭j v叩ltozat"
+msgstr[1] "Friss鱈tve %(filename)s a rev鱈zi坦ra %(rev)d, %(count)d 炭j v叩ltozatok"
+
+#: wb_subversion_list_handler.py:462
+#: wb_subversion_list_handler.py:515
+#: wb_subversion_tree_handler.py:889
+#, python-format
+msgid "%d file is in conflict"
+msgid_plural "%d files are in conflict"
+msgstr[0] "%d f叩jln叩l konfliktus"
+msgstr[1] "%d f叩jlokn叩l konfliktus"
+
+#: wb_subversion_list_handler.py:471
+#: wb_subversion_tree_handler.py:837
+msgid "Update to revision"
+msgstr "Rev鱈zi坦 friss鱈t辿se"
+
+#: wb_subversion_project_info.py:244
+msgid "Hostname"
+msgstr "Hostn辿v"
+
+#: wb_subversion_project_info.py:245
+msgid "Valid From"
+msgstr "テ詠vテゥnyessテゥg kezdete:"
+
+#: wb_subversion_project_info.py:246
+msgid "Valid Until"
+msgstr "テ詠vテゥnyessテゥg vテゥge:"
+
+#: wb_subversion_project_info.py:247
+msgid "Issuer Name"
+msgstr "Egy 辿rt辿k be鱈r叩sa %s"
+
+#: wb_subversion_project_info.py:248
+msgid "Finger Print"
+msgstr "Ujjlenyomat"
+
+#: wb_subversion_properties_dialog.py:92
+#: wb_subversion_properties_dialog.py:113
+#, python-format
+msgid "Enter a value for %s"
+msgstr "Egy 辿rt辿k be鱈r叩sa %s"
+
+#: wb_subversion_report_branch_changes.py:25
+msgid "Branch changes report"
+msgstr "Branch v叩ltoz叩sok jelent辿s"
+
+#: wb_subversion_report_branch_changes.py:52
+#: wb_subversion_report_lock.py:60
+#: wb_subversion_report_updates.py:63
+msgid "Diff changes against HEAD"
+msgstr "V叩ltoz叩sok 旦sszehasonl鱈t叩sa a HEAD-ben"
+
+#: wb_subversion_report_lock.py:30
+msgid "Repository Lock Report"
+msgstr "T叩rol坦 z叩r叩si besz叩mol坦"
+
+#: wb_subversion_report_lock.py:32
+msgid "Working Copy Lock Report"
+msgstr "Munkap辿ld叩ny z叩r叩s besz叩mol坦"
+
+#: wb_subversion_report_lock.py:70
+#: wb_toolbars.py:125
+msgid "Lock File"
+msgstr "F叩jl z叩r叩sa"
+
+#: wb_subversion_report_lock.py:73
+#: wb_toolbars.py:128
+msgid "Unlock File"
+msgstr "F叩jl nyit叩sa"
+
+#: wb_subversion_report_revision_changes.py:36
+#, python-format
+msgid "Revision changes - r%(rev1)d vs. r%(rev2)d"
+msgstr "Revizi坦 cser辿je - r%(rev1)d 辿s r%(rev2)d k旦z旦tt"
+
+#: wb_subversion_report_revision_changes.py:44
+#, python-format
+msgid "Diff r%(rev1)d vs. r%(rev1)d..."
+msgstr "テ穆szehasonlテュtテ。s r%(rev1)d テゥs r%(rev1)d kテカzテカtt..."
+
+#: wb_subversion_report_revision_changes.py:159
+#, python-format
+msgid "Diff -r%(rev1)d:%(rev2)d %(url)s..."
+msgstr "テ穆szehasonlテュtテ。s -r%(rev1)d:%(rev2)d %(url)s..."
+
+#: wb_subversion_report_updates.py:33
+msgid "Updates Report"
+msgstr "Friss鱈t辿si jelent辿s"
+
+#: wb_subversion_report_updates.py:47
+msgid "Exclude from update"
+msgstr "Kimaradt a frissテュtテゥsbナ鼠"
+
+#: wb_subversion_report_updates.py:48
+msgid "Include in update"
+msgstr "Tartalmazza a friss鱈t辿s"
+
+#: wb_subversion_report_updates.py:286
+msgid " Update "
+msgstr " Friss鱈t辿s"
+
+#: wb_subversion_tree_handler.py:208
+#, python-format
+msgid "Creating branch %s"
+msgstr "Branch k辿sz鱈t辿se %s"
+
+#: wb_subversion_tree_handler.py:212
+#, python-format
+msgid "Creating tag %s"
+msgstr "Tag k辿sz鱈t辿se %s"
+
+#: wb_subversion_tree_handler.py:249
+#, python-format
+msgid "Copied folder %s to the Clipboard"
+msgstr "Dosszi辿 %s m叩sol叩sa a v叩g坦lapra"
+
+#: wb_subversion_tree_handler.py:254
+#, python-format
+msgid "Cut folder %s to the Clipboard"
+msgstr "Dosszi辿 %s kiv叩g叩sa a v叩g坦lapra"
+
+#: wb_subversion_tree_handler.py:262
+msgid "Add Folder"
+msgstr "Dosszi辿 hozz叩ad叩sa"
+
+#: wb_subversion_tree_handler.py:275
+#: wb_subversion_tree_handler.py:289
+#, python-format
+msgid "Checkout %s..."
+msgstr "Ellenナ喪zテゥs %s..."
+
+#: wb_subversion_tree_handler.py:286
+msgid "Checkout to revision"
+msgstr "Revテュziテウ ellenナ喪zテゥse"
+
+#: wb_subversion_tree_handler.py:315
+#, python-format
+msgid "Clean up %s..."
+msgstr "Tiszt鱈t叩s %s..."
+
+#: wb_subversion_tree_handler.py:331
+#, python-format
+msgid "Look for changes to check in %s..."
+msgstr "Cserテゥk ellenナ喪zテゥse itt: %s"
+
+#: wb_subversion_tree_handler.py:374
+msgid "Delete Folder"
+msgstr "Dosszi辿 t旦rl辿se"
+
+#: wb_subversion_tree_handler.py:513
+msgid "Make directory"
+msgstr "K旦nyvt叩r k辿sz鱈t辿se"
+
+#: wb_subversion_tree_handler.py:547
+#, python-format
+msgid "Cannot read template %(filename)s - %(error)s"
+msgstr "Nem olvashat坦 a sablon %(filename)s - %(error)s"
+
+#: wb_subversion_tree_handler.py:559
+#, python-format
+msgid "Cannot create new file %(filename)s - %(error)s"
+msgstr "Nem kテゥszテュthetナ_ テコj fテ。jl %(filename)s - %(error)s"
+
+#: wb_subversion_tree_handler.py:610
+#, python-format
+msgid "Looking for repository locks in %s..."
+msgstr "T叩rol坦 z叩r叩sok n辿z辿se itt %s..."
+
+#: wb_subversion_tree_handler.py:612
+#, python-format
+msgid "Looking for working copy locks in %s..."
+msgstr "Munkap辿ld叩ny z叩r叩sok n辿z辿se itt %s..."
+
+#: wb_subversion_tree_handler.py:636
+msgid "There are no locked files in the repository"
+msgstr "Nincs z叩rt f叩jl a t叩rol坦ban"
+
+#: wb_subversion_tree_handler.py:639
+msgid "There are no locked files in the working copy"
+msgstr "Nincs z叩rt f叩jl a munkap辿ld叩nyban"
+
+#: wb_subversion_tree_handler.py:649
+#, python-format
+msgid "Updates %s..."
+msgstr "Friss鱈t辿s %s..."
+
+#: wb_subversion_tree_handler.py:668
+msgid "All files are up todate"
+msgstr "Minden f叩jl naprak辿sz"
+
+#: wb_subversion_tree_handler.py:684
+#, python-format
+msgid "Branch changes %s..."
+msgstr "Branch cser辿k %s..."
+
+#: wb_subversion_tree_handler.py:774
+#, python-format
+msgid "No files changed yet in branch \"%s\"."
+msgstr "M辿g nincs cser辿lt f叩jl a branchban \"%s\"."
+
+#: wb_subversion_tree_handler.py:786
+msgid "Rename Directory"
+msgstr "K旦nyvt叩r 叩tnevez辿se"
+
+#: wb_subversion_tree_handler.py:814
+msgid "There are no changes to revert"
+msgstr "Nem t旦rt辿ntek cser辿k"
+
+#: wb_subversion_tree_handler.py:886
+msgid "Already up to date"
+msgstr "M叩r naprak辿sz"
+
+#: wb_subversion_tree_handler.py:901
+#, python-format
+msgid "Copied %(from)s to %(to)s"
+msgstr "M叩solva %(from)s innen ide %(to)s"
+
+#: wb_subversion_tree_handler.py:913
+#, python-format
+msgid "Moved %(from)s to %(to)s"
+msgstr "Mozgatva innen %(from)s ide %(to)s"
+
+#: wb_toolbars.py:82
+msgid "Cut Files and Folders"
+msgstr "F叩jl 辿s dosszi辿 kiv叩g叩sa"
+
+#: wb_toolbars.py:85
+msgid "Copy Files and Folders"
+msgstr "F叩jl 辿s dosszi辿 m叩sol叩sa"
+
+#: wb_toolbars.py:88
+msgid "Paste Files and Folders"
+msgstr "F叩jl 辿s dosszi辿 beilleszt辿se"
+
+#: wb_toolbars.py:92
+msgid "Start new command shell"
+msgstr "テ嗚 terminテ。l indテュtテ。sa"
+
+#: wb_toolbars.py:116
+msgid "Add Files and Folders"
+msgstr "F叩jl 辿s dosszi辿 hozz叩ad叩sa"
+
+#: wb_toolbars.py:119
+msgid "Delete selected Files and Folders"
+msgstr "Kiv叩lasztott f叩jlok 辿s dosszi辿k t旦rl辿se"
+
+#: wb_toolbars.py:131
+msgid "Checkin changes"
+msgstr "Cserテゥk ellenナ喪zテゥse"
+
+#: wb_toolbars.py:134
+msgid "Update working copy"
+msgstr "Munkap辿ld叩ny friss鱈t辿se"
+
+#: wb_toolbars.py:137
+msgid "Use recursive (flat) view"
+msgstr "Rekurz鱈v n辿zet haszn叩lata"
+
+#: wb_toolbars.py:141
+msgid "Show only changed files"
+msgstr "Csak a v叩ltozott f叩jlok mutat叩sa"
+
+#: wb_tree_panel.py:244
+msgid "Projects:"
+msgstr "Projekt:"
+
+#: wb_tree_panel.py:406
+#: wb_tree_panel.py:471
+msgid "Refreshing view..."
+msgstr "N辿zet friss鱈t辿se..."
+
+#: wb_tree_panel.py:997
+msgid "&Add Project"
+msgstr "Projekt hozz叩ad叩sa"
+
+
diff -Nru svn-workbench-1.6.2/Source/make_mo_files.py svn-workbench-1.6.6/Source/make_mo_files.py
--- svn-workbench-1.6.2/Source/make_mo_files.py	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Source/make_mo_files.py	2010-08-01 21:39:35.000000000 +0900
@@ -4,7 +4,7 @@
 
 localedir = sys.argv[1]
 
-all_lang = ['en', 'de']
+all_lang = ['en', 'de', 'hu']
 
 for lang in all_lang:
     mo_output_dir = '%s/%s/LC_MESSAGES' % (localedir, lang)
diff -Nru svn-workbench-1.6.2/Source/make_pot_file.py svn-workbench-1.6.6/Source/make_pot_file.py
--- svn-workbench-1.6.2/Source/make_pot_file.py	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Source/make_pot_file.py	2011-11-06 23:19:48.000000000 +0900
@@ -12,7 +12,7 @@
     f.write( '%s\n' % py_file )
 f.close()
 
-rc = os.system( 'xgettext '
+cmd = ('xgettext '
     '--files-from=wb_files.tmp '
     '--default-domain=pysvn_workbench '
     '--output=I18N/pysvn_workbench.current.pot '
@@ -25,5 +25,8 @@
     '--no-wrap '
     '--width=2047 '
     '--add-comments=Translat '
-    '--language=Python' )
+    '--language=Python')
+
+print 'Info: %s' % (cmd,)
+rc = os.system( cmd )
 sys.exit( rc )
diff -Nru svn-workbench-1.6.2/Source/run_wb.cmd svn-workbench-1.6.6/Source/run_wb.cmd
--- svn-workbench-1.6.2/Source/run_wb.cmd	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Source/run_wb.cmd	2012-03-04 05:14:15.000000000 +0900
@@ -1,4 +1,4 @@
 setlocal 
-set PYTHONPATH=C:\BuildRoot\Win32-MSVC90-1.6.5\py26_pysvn\Source 
-python C:\wc\pysvn\trunk\pysvn\WorkBench\Source\wb_main.py %* 
+set PYTHONPATH=C:\BuildRoot\Win32-MSVC90-1.7.3\py27_pysvn\Source 
+python C:\wc\svn\pysvn\WorkBench\Source\wb_main.py %* 
 endlocal 
diff -Nru svn-workbench-1.6.2/Source/wb-diff.sh svn-workbench-1.6.6/Source/wb-diff.sh
--- svn-workbench-1.6.2/Source/wb-diff.sh	1970-01-01 09:00:00.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb-diff.sh	2011-11-05 22:50:19.000000000 +0900
@@ -0,0 +1,29 @@
+#!/bin/sh
+export PYSVN_WORKBENCH_STDOUT_LOG=$(tty)
+
+SOURCEDIR=$( dirname $0 )
+
+if [ "$PYTHONPATH" = "" ]
+then
+	export PYTHONPATH=${SOURCEDIR}
+else
+	export PYTHONPATH=${SOURCEDIR}:$PYTHONPATH
+fi
+
+PYTHON=${PYTHON:-python}
+BASENAME=$( basename ${PYTHON} )
+SUFFIX=${X#python*}
+DIRNAME=$( dirname ${PYTHON} )
+
+if [ "${DIRNAME}" != "" ]
+then
+    DIRNAME=${DIRNAME}/
+fi
+PYTHONW=${DIRNAME}pythonw${SUFFIX}
+
+if [ -e ${PYTHONW} ]
+then
+    ${PYTHONW} ${SOURCEDIR}/wb_diff_main.py $*
+else
+    ${PYTHON} ${SOURCEDIR}/wb_diff_main.py $*
+fi
diff -Nru svn-workbench-1.6.2/Source/wb.rc.template svn-workbench-1.6.6/Source/wb.rc.template
--- svn-workbench-1.6.2/Source/wb.rc.template	2009-09-26 05:34:18.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb.rc.template	2010-03-21 04:08:11.000000000 +0900
@@ -50,7 +50,7 @@
             VALUE "FileDescription", "Work Bench\0"
             VALUE "FileVersion", "%(MAJOR)s, %(MINOR)s, %(PATCH)s, %(BUILD)s\0"
             VALUE "InternalName", "WorkBench\0"
-            VALUE "LegalCopyright", "Copyright ゥ 2003-2007 Barry A. Scott\0"
+            VALUE "LegalCopyright", "Copyright ゥ 2003-2010 Barry A. Scott\0"
             VALUE "LegalTrademarks", "\0"
             VALUE "OriginalFilename", "Workbench.exe\0"
             VALUE "PrivateBuild", "\0"
diff -Nru svn-workbench-1.6.2/Source/wb.sh svn-workbench-1.6.6/Source/wb.sh
--- svn-workbench-1.6.2/Source/wb.sh	2006-10-25 06:51:49.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb.sh	2011-11-27 23:20:58.000000000 +0900
@@ -9,7 +9,7 @@
 
 PYTHON=${PYTHON:-python}
 BASENAME=$( basename ${PYTHON} )
-SUFFIX=${X#python*}
+SUFFIX=${BASENAME#python*}
 DIRNAME=$( dirname ${PYTHON} )
 
 if [ "${DIRNAME}" != "" ]
@@ -18,9 +18,14 @@
 fi
 PYTHONW=${DIRNAME}pythonw${SUFFIX}
 
+if [ -e /System/Library/CoreServices/SystemVersion.plist ]
+then
+    ARCH_CMD="arch -i386"
+fi
+
 if [ -e ${PYTHONW} ]
 then
-    ${PYTHONW} wb_main.py $*
+    ${ARCH_CMD} ${PYTHONW} wb_main.py $*
 else
-    ${PYTHON} wb_main.py $*
+    ${ARCH_CMD} ${PYTHON} wb_main.py $*
 fi
diff -Nru svn-workbench-1.6.2/Source/wb_app.py svn-workbench-1.6.6/Source/wb_app.py
--- svn-workbench-1.6.2/Source/wb_app.py	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_app.py	2012-07-25 06:31:59.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -663,6 +663,8 @@
     def emit( self, record ):
         try:
             msg = self.format(record) + '\n'
+            if type( msg ) == types.UnicodeType:
+                msg = msg.encode( 'utf-8' )
 
             sys.__stdout__.write( msg )
 
diff -Nru svn-workbench-1.6.2/Source/wb_background_thread.py svn-workbench-1.6.6/Source/wb_background_thread.py
--- svn-workbench-1.6.2/Source/wb_background_thread.py	2006-09-03 03:06:43.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_background_thread.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_bookmarks_dialogs.py svn-workbench-1.6.6/Source/wb_bookmarks_dialogs.py
--- svn-workbench-1.6.2/Source/wb_bookmarks_dialogs.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_bookmarks_dialogs.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2005-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2005-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_clipboard.py svn-workbench-1.6.6/Source/wb_clipboard.py
--- svn-workbench-1.6.2/Source/wb_clipboard.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_clipboard.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_config.py svn-workbench-1.6.6/Source/wb_config.py
--- svn-workbench-1.6.2/Source/wb_config.py	2007-01-29 02:06:09.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_config.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2006-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2006-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_dialogs.py svn-workbench-1.6.6/Source/wb_dialogs.py
--- svn-workbench-1.6.2/Source/wb_dialogs.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_dialogs.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -14,6 +14,7 @@
 import os
 import pysvn
 import wb_subversion_utils
+import wb_platform_specific
 
 id_log_message_text = wx.NewId()
 id_last_log_message = wx.NewId()
@@ -123,7 +124,7 @@
         self.last_log_message_text = None
         if self.message_filename is not None:
             try:
-                self.last_log_message_text = file( self.message_filename, 'r' ).read().decode('utf-8').strip()
+                self.last_log_message_text = wb_platform_specific.uOpen( self.message_filename, 'r' ).read().decode('utf-8').strip()
             except EnvironmentError:
                 self.last_log_message_text = ''
 
@@ -150,7 +151,7 @@
     def OnOk( self, event ):
         self.EndModal( wx.ID_OK )
         try:
-            file( self.message_filename, 'w' ).write( self.getLogMessage().encode('utf-8') )
+            wb_platform_specific.uOpen( self.message_filename, 'w' ).write( self.getLogMessage().encode('utf-8') )
         except (IOError,OSError):
             pass
 
diff -Nru svn-workbench-1.6.2/Source/wb_diff_difflib.py svn-workbench-1.6.6/Source/wb_diff_difflib.py
--- svn-workbench-1.6.2/Source/wb_diff_difflib.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_diff_difflib.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_diff_frame.py svn-workbench-1.6.6/Source/wb_diff_frame.py
--- svn-workbench-1.6.2/Source/wb_diff_frame.py	2009-10-12 03:44:39.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_diff_frame.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_diff_images.py svn-workbench-1.6.6/Source/wb_diff_images.py
--- svn-workbench-1.6.2/Source/wb_diff_images.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_diff_images.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_diff_main.py svn-workbench-1.6.6/Source/wb_diff_main.py
--- svn-workbench-1.6.2/Source/wb_diff_main.py	2009-10-11 23:04:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_diff_main.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_diff_processor.py svn-workbench-1.6.6/Source/wb_diff_processor.py
--- svn-workbench-1.6.2/Source/wb_diff_processor.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_diff_processor.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_exceptions.py svn-workbench-1.6.6/Source/wb_exceptions.py
--- svn-workbench-1.6.2/Source/wb_exceptions.py	2006-09-03 03:06:43.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_exceptions.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_frame.py svn-workbench-1.6.6/Source/wb_frame.py
--- svn-workbench-1.6.2/Source/wb_frame.py	2009-10-11 23:04:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_frame.py	2011-11-27 22:43:10.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -27,6 +27,7 @@
 import wb_platform_specific
 import wb_bookmarks_dialogs
 import wb_toolbars
+import wb_subversion_utils
 
 import wb_config
 
@@ -118,6 +119,9 @@
         self.menu_actions.Append( wb_ids.id_SP_Revert, T_('Revert...'), T_('Revert') )
         self.menu_actions.AppendSeparator()
         self.menu_actions.Append( wb_ids.id_SP_Cleanup, T_('Clean up'), T_('Clean up working copy') )
+        if wb_subversion_utils.version_info.has_upgrade:
+            self.menu_actions.AppendSeparator()
+            self.menu_actions.Append( wb_ids.id_SP_Upgrade, T_('Upgrade'), T_('Upgrade working copy') )
         self.menu_actions.AppendSeparator()
         self.menu_actions.Append( wb_ids.id_SP_CreateTag, T_('Create Tag...'), T_('Create Tag') )
         self.menu_actions.Append( wb_ids.id_SP_CreateBranch, T_('Create Branch...'), T_('Create Branch') )
@@ -345,6 +349,10 @@
         wx.EVT_MENU( self, wb_ids.id_SP_UpdateTo, self.app.eventWrapper( self.OnSpUpdateTo ) )
         wx.EVT_UPDATE_UI( self, wb_ids.id_SP_UpdateTo, self.app.eventWrapper( self.OnUpdateUiSpUpdateTo ) )
 
+        if wb_subversion_utils.version_info.has_upgrade:
+            wx.EVT_MENU( self, wb_ids.id_SP_Upgrade, self.app.eventWrapper( self.OnSpUpgrade ) )
+            wx.EVT_UPDATE_UI( self, wb_ids.id_SP_Upgrade, self.app.eventWrapper( self.OnUpdateUiSpUpgrade ) )
+
         wx.EVT_MENU( self, wb_ids.id_SP_Report_Updates, self.app.eventWrapper( self.OnSpReportUpdates ) )
         wx.EVT_UPDATE_UI( self, wb_ids.id_SP_Report_Updates, self.app.eventWrapper( self.OnUpdateUiSpReportUpdates ) )
         wx.EVT_MENU( self, wb_ids.id_SP_Report_LocksWc, self.app.eventWrapper( self.OnSpReportLocksWc ) )
@@ -462,13 +470,17 @@
         ver_str = ('%d.%d.%d-%d\n' %
                     (wb_version.major, wb_version.minor,
                      wb_version.patch, wb_version.build))
-        str_message =    ((T_('Work Bench version: %s') % ver_str) +
-                '\n' + wb_source_control_providers.getProviderAboutStrings() +
-                '\nwxPython %d.%d.%d.%d %s' % wx.VERSION +
-                '\nPython %d.%d.%d %s %d\n' % sys.version_info +
-                T_('\nCopyright Barry Scott (c) 2003-2009. All rights reserved')
-                )
-        wx.LogMessage( str_message )
+        str_message_parts = [T_('Work Bench version: %s') % ver_str
+                            ,wb_source_control_providers.getProviderAboutStrings()
+                            ,'wxPython %d.%d.%d.%d %s' % wx.VERSION
+                            ,'Python %d.%d.%d %s %d\n' % (sys.version_info[0]
+                                                         ,sys.version_info[1]
+                                                         ,sys.version_info[2]
+                                                         ,sys.version_info[3]
+                                                         ,sys.version_info[4])
+
+                            ,T_('\nCopyright Barry Scott (c) 2003-2011. All rights reserved')]
+        wx.LogMessage( '\n'.join( str_message_parts ) )
 
     def OnCmdPreferences( self, event ):
         pref_dialog = wb_preferences_dialog.PreferencesDialog( self, self.app )
@@ -770,7 +782,8 @@
 
     def OnUpdateUiSpAnnotate( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned and (not self.ui_state_focus.is_folder) )
@@ -780,7 +793,8 @@
 
     def OnUpdateUiSpCheckin( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.need_checkin
@@ -872,7 +886,8 @@
 
     def OnUpdateUiSpDiffWorkHead( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             if self.ui_state_list is self.ui_state_focus:
@@ -888,14 +903,16 @@
 
     def OnUpdateUiSpDiffWorkBranchOriginBase( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_list.versioned and not self.ui_state_list.new_versioned )
 
     def OnUpdateUiSpDiffWorkBranchOriginHead( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_list.versioned and not self.ui_state_list.new_versioned )
@@ -907,7 +924,8 @@
         self.getUpdateUiState()
         if wb_config.debug_selection_update: print 'ZF: OnUpdateUiSpHistory versioned %r handler %r' % (
                                                 self.ui_state_focus.versioned, self.event_handler)
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned and not self.ui_state_focus.new_versioned )
@@ -917,7 +935,8 @@
 
     def OnUpdateUiSpInfo( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned )
@@ -949,7 +968,8 @@
 
     def OnUpdateUiSpProperties( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.versioned )
@@ -1001,7 +1021,8 @@
 
     def OnUpdateUiSpRevert( self, event ):
         self.getUpdateUiState()
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
         else:
             event.Enable( self.ui_state_focus.revertable )
@@ -1019,7 +1040,8 @@
     def OnUpdateUiSpUpdate( self, event ):
         self.getUpdateUiState()
 
-        if self.ui_state_focus.need_checkout:
+        if( self.ui_state_focus.need_checkout
+        or self.ui_state_focus.need_upgrade ):
             event.Enable( False )
 
         elif self.ui_state_focus.is_project_parent:
@@ -1041,6 +1063,16 @@
     def OnUpdateUiSpUpdateTo( self, event ):
         self.OnUpdateUiSpUpdate(event)
 
+    def OnSpUpgrade( self, event ):
+        self.clearUpdateUiState()
+        return self.tree_panel.OnSpUpgrade()
+
+    def OnUpdateUiSpUpgrade( self, event ):
+        self.getUpdateUiState()
+
+        # this is a tree only command
+        event.Enable( self.list_panel.list_handler.project_info.need_upgrade )
+
     #----------------------------------------
     def Sp_Dispatch( self, sp_func_name ):
         self.clearUpdateUiState()
@@ -1102,7 +1134,7 @@
         self.text_ctrl = StyledLogCtrl( self.app, self )
 
         # Redirect the console IO to this panel
-        sys.stdin = file( wb_platform_specific.getNullDevice(), 'r' )
+        sys.stdin = wb_platform_specific.uOpen( wb_platform_specific.getNullDevice(), 'r' )
         if self.app.isStdIoRedirect():
             sys.stdout = self
             sys.stderr = self
diff -Nru svn-workbench-1.6.2/Source/wb_ids.py svn-workbench-1.6.6/Source/wb_ids.py
--- svn-workbench-1.6.2/Source/wb_ids.py	2009-03-08 03:25:46.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_ids.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -75,6 +75,7 @@
 id_SP_Unlock = wx.NewId()
 id_SP_Update = wx.NewId()
 id_SP_UpdateTo = wx.NewId()
+id_SP_Upgrade = wx.NewId()
 id_SP_CreateTag = wx.NewId()
 id_SP_CreateBranch = wx.NewId()
 
diff -Nru svn-workbench-1.6.2/Source/wb_list_panel.py svn-workbench-1.6.6/Source/wb_list_panel.py
--- svn-workbench-1.6.2/Source/wb_list_panel.py	2009-03-08 03:25:46.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_list_panel.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_list_panel_common.py svn-workbench-1.6.6/Source/wb_list_panel_common.py
--- svn-workbench-1.6.2/Source/wb_list_panel_common.py	2009-10-12 01:25:29.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_list_panel_common.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -21,6 +21,7 @@
 import wb_ids
 import wb_shell_commands
 import wb_dialogs
+import wb_platform_specific
 
 class ListSortData:
     def __init__( self, order=1, field=0 ):
@@ -54,6 +55,7 @@
         self.unversioned = False
         self.need_checkin = False
         self.need_checkout = False
+        self.need_upgrade = False
         self.conflict = False
         self.file_exists = False
         self.is_folder = False
@@ -328,7 +330,7 @@
             if self.list_handler.mayOpen( row ):
                 self.app.selectTreeNode( filename )
 
-            elif not os.path.isdir( filename ):
+            elif not wb_platform_specific.uPathIsdir( filename ):
                 wb_shell_commands.EditFile( self.app, self.list_handler.getProjectInfo(), filename )
 
     def isTreeHandler( self ):
diff -Nru svn-workbench-1.6.2/Source/wb_main.py svn-workbench-1.6.6/Source/wb_main.py
--- svn-workbench-1.6.2/Source/wb_main.py	2009-10-04 20:50:50.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_main.py	2012-03-04 05:14:15.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2012 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -27,7 +27,7 @@
 or (sys.platform == 'darwin' and '--noredirect' not in sys.argv) ):
     stdout_filename = os.environ.get( 'PYSVN_WORKBENCH_STDOUT_LOG', '/tmp/workbench.tmp' )
 
-elif sys.platform.startswith( 'win' ):
+elif sys.platform.startswith( 'win' ) and '--noredirect' not in sys.argv:
     stdout_filename = os.path.join( os.environ[ 'TEMP' ], 'workbench.tmp' )
 
 if stdout_filename is not None:
diff -Nru svn-workbench-1.6.2/Source/wb_platform_macosx_specific.py svn-workbench-1.6.6/Source/wb_platform_macosx_specific.py
--- svn-workbench-1.6.2/Source/wb_platform_macosx_specific.py	2009-10-04 20:50:50.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_platform_macosx_specific.py	2011-01-05 20:46:33.000000000 +0900
@@ -1,7 +1,7 @@
 '''
 
  ====================================================================
- Copyright (c) 2004-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2004-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -13,7 +13,7 @@
 
 '''
 import os
-import sys
+import types
 
 def getApplicationDir():
     return os.path.join( os.environ['HOME'], 'Library/Preferences/org.tigris.pysvn.Workbench' )
@@ -23,3 +23,48 @@
 
 def getNullDevice():
     return '/dev/null'
+
+def uPathExists( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.exists( path )
+
+def uPathIsdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.isdir( path )
+
+def uAccess( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.access( path, mode )
+
+def uRemove( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.remove( path )
+
+def uRename( path1, path2 ):
+    if type(path1) == types.UnicodeType:
+        path1 = path1.encode( 'utf-8' )
+
+    if type(path2) == types.UnicodeType:
+        path2 = path2.encode( 'utf-8' )
+
+    return os.rename( path1, path2 )
+
+def uOpen( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return open( path, mode )
+
+def uChdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.chdir( path )
diff -Nru svn-workbench-1.6.2/Source/wb_platform_specific.py svn-workbench-1.6.6/Source/wb_platform_specific.py
--- svn-workbench-1.6.2/Source/wb_platform_specific.py	2007-05-28 19:37:14.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_platform_specific.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,7 +1,7 @@
 '''
 
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_platform_unix_specific.py svn-workbench-1.6.6/Source/wb_platform_unix_specific.py
--- svn-workbench-1.6.2/Source/wb_platform_unix_specific.py	2007-12-01 16:13:47.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_platform_unix_specific.py	2011-01-05 20:46:33.000000000 +0900
@@ -1,7 +1,7 @@
 '''
 
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -13,6 +13,7 @@
 
 '''
 import os
+import types
 
 def getApplicationDir():
     return os.path.join( os.environ['HOME'], '.WorkBench' )
@@ -22,3 +23,48 @@
 
 def getNullDevice():
     return '/dev/null'
+
+def uPathExists( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.exists( path )
+
+def uPathIsdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.path.isdir( path )
+
+def uAccess( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.access( path, mode )
+
+def uRemove( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.remove( path )
+
+def uRename( path1, path2 ):
+    if type(path1) == types.UnicodeType:
+        path1 = path1.encode( 'utf-8' )
+
+    if type(path2) == types.UnicodeType:
+        path2 = path2.encode( 'utf-8' )
+
+    return os.rename( path1, path2 )
+
+def uOpen( path, mode ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return open( path, mode )
+
+def uChdir( path ):
+    if type(path) == types.UnicodeType:
+        path = path.encode( 'utf-8' )
+
+    return os.chdir( path )
diff -Nru svn-workbench-1.6.2/Source/wb_platform_win32_specific.py svn-workbench-1.6.6/Source/wb_platform_win32_specific.py
--- svn-workbench-1.6.2/Source/wb_platform_win32_specific.py	2007-12-01 16:13:47.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_platform_win32_specific.py	2011-01-05 03:50:40.000000000 +0900
@@ -1,7 +1,7 @@
 '''
 
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -28,3 +28,11 @@
 
 def getNullDevice():
     return 'NUL'
+
+uPathExists = os.path.exists
+uPathIsdir = os.path.isdir
+uAccess = os.access
+uRemove = os.remove
+uRename = os.rename
+uOpen = open
+uChdir = os.chdir
diff -Nru svn-workbench-1.6.2/Source/wb_preferences.py svn-workbench-1.6.6/Source/wb_preferences.py
--- svn-workbench-1.6.2/Source/wb_preferences.py	2009-10-11 23:04:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_preferences.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,7 +1,7 @@
 '''
 
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -105,14 +105,14 @@
             new_name = self.pref_filename + '.tmp'
             old_name = self.pref_filename + '.old'
 
-            f = file( new_name, 'w' )
+            f = wb_platform_specific.uOpen( new_name, 'w' )
             self.pref_data.write( f )
             f.close()
-            if os.path.exists( self.pref_filename ):
-                if os.path.exists( old_name ): # os.rename does not delete automatically on Windows.
-                    os.remove( old_name )
-                os.rename( self.pref_filename, old_name )
-            os.rename( new_name, self.pref_filename )
+            if wb_platform_specific.uPathExists( self.pref_filename ):
+                if wb_platform_specific.uPathExists( old_name ): # os.rename does not delete automatically on Windows.
+                    wb_platform_specific.uRemove( old_name )
+                wb_platform_specific.uRename( self.pref_filename, old_name )
+            wb_platform_specific.uRename( new_name, self.pref_filename )
 
             self.app.log.info( T_('Wrote preferences to %s') % self.pref_filename )
 
@@ -123,7 +123,7 @@
     def __init__( self, log, xml_pref_filename, ini_pref_filename ):
         self.all_sections = {}
 
-        if os.path.exists( xml_pref_filename ):
+        if wb_platform_specific.uPathExists( xml_pref_filename ):
             log.info( T_('Reading preferences from %s') % xml_pref_filename )
             self.__readXml( xml_pref_filename )
         else:
@@ -132,7 +132,7 @@
 
     def __readXml( self, xml_pref_filename ):
         try:
-            f = file( xml_pref_filename, 'r' )
+            f = wb_platform_specific.uOpen( xml_pref_filename, 'r' )
             text = f.read()
             f.close()
 
diff -Nru svn-workbench-1.6.2/Source/wb_preferences_dialog.py svn-workbench-1.6.6/Source/wb_preferences_dialog.py
--- svn-workbench-1.6.2/Source/wb_preferences_dialog.py	2009-10-03 19:22:02.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_preferences_dialog.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -18,6 +18,7 @@
 import wb_dialogs
 import wb_tree_panel
 import wb_toolbars
+import wb_platform_specific
 
 class PreferencesDialog( wx.Dialog ):
     def __init__( self, parent, app ):
@@ -168,14 +169,14 @@
         # otherwise it must exist
         valid = False
         if wx.Platform == '__WXMAC__':
-            valid = (os.access( self.text_ctrl_editor.GetValue(), os.X_OK )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uAccess( self.text_ctrl_editor.GetValue(), os.X_OK )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
         elif wx.Platform == '__WXMSW__':
-            valid = (os.path.exists( self.text_ctrl_editor.GetValue() )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uPathExists( self.text_ctrl_editor.GetValue() )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
         else:
-            valid = (os.access( self.text_ctrl_editor.GetValue(), os.X_OK )
-                or not os.path.isdir( self.text_ctrl_editor.GetValue() ) )
+            valid = (wb_platform_specific.uAccess( self.text_ctrl_editor.GetValue(), os.X_OK )
+                or not wb_platform_specific.uPathIsdir( self.text_ctrl_editor.GetValue() ) )
 
         if not valid:
             wx.MessageBox(
diff -Nru svn-workbench-1.6.2/Source/wb_project_dialogs.py svn-workbench-1.6.6/Source/wb_project_dialogs.py
--- svn-workbench-1.6.2/Source/wb_project_dialogs.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_project_dialogs.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -12,7 +12,10 @@
 '''
 import wx
 import wx.wizard
+
 import wb_source_control_providers
+import wb_platform_specific
+
 import pysvn
 import os
 
@@ -143,7 +146,7 @@
         wc_path = os.path.expanduser( self.wc_path_ctrl.GetValue().strip() )
 
         url = None
-        if os.path.exists( wc_path ):
+        if wb_platform_specific.uPathExists( wc_path ):
             try:
                 info = self.client.info( wc_path )
                 url = info.url
@@ -508,14 +511,14 @@
         state.wc_path = os.path.abspath( os.path.expanduser( self.wc_path_ctrl.GetValue().strip() ) )
         state.url_path = self.url_ctrl.GetLabel().strip()
 
-        if not os.path.exists( state.wc_path ):
+        if not wb_platform_specific.uPathExists( state.wc_path ):
             wx.MessageBox( T_('Path %s\n'
                     'Does not exist\n'
                     'Choose an existing subversion working copy directory')
                     % state.wc_path, style=wx.OK|wx.ICON_ERROR );
             return False
 
-        if not os.path.isdir( state.wc_path ):
+        if not wb_platform_specific.uPathIsdir( state.wc_path ):
             wx.MessageBox( T_('Path %s\n'
                     'Is not a directory\n'
                     'Choose an existing subversion working copy directory')
@@ -557,7 +560,7 @@
         wc_path = os.path.expanduser( wc_path )
 
         url = None
-        if os.path.exists( wc_path ):
+        if wb_platform_specific.uPathExists( wc_path ):
             try:
                 info = self.parent.client_pi.client_fg.info( wc_path )
                 url = info.url
@@ -665,8 +668,8 @@
                     style=wx.OK|wx.ICON_ERROR );
             return False
 
-        if os.path.exists( state.wc_path ):
-            if not os.path.isdir( state.wc_path ):
+        if wb_platform_specific.uPathExists( state.wc_path ):
+            if not wb_platform_specific.uPathIsdir( state.wc_path ):
                 wx.MessageBox( T_('Path %s\n'
                         'Is not a directory\n'
                         'Choose a directory that is empty and not in use by subversion')
diff -Nru svn-workbench-1.6.2/Source/wb_read_file.py svn-workbench-1.6.6/Source/wb_read_file.py
--- svn-workbench-1.6.2/Source/wb_read_file.py	2007-04-07 17:51:00.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_read_file.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2005-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2005-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -13,8 +13,10 @@
 import locale
 import codecs
 
+import wb_platform_specific
+
 def readFileContentsAsUnicode( filename ):
-    f = file( filename, 'r' )
+    f = wb_platform_specific.uOpen( filename, 'r' )
     contents = f.read()
     f.close()
 
@@ -37,15 +39,22 @@
     if( len(contents) > len(codecs.BOM_UTF8)
     and contents[0:len(codecs.BOM_UTF8)] == codecs.BOM_UTF8 ):
         encoding = 'utf-8'
+
     elif( len(contents) > len(codecs.BOM_UTF16_LE)
     and contents[0:len(codecs.BOM_UTF16_LE)] in [codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE]):
         encoding = 'utf-16'
+
     elif( len(contents) > len(codecs.BOM_UTF32_LE)
     and contents[0:len(codecs.BOM_UTF32_LE)] in [codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE]):
         encoding = 'utf-32'
+
     else:
         encoding = locale.getdefaultlocale()[1]
 
+        # Mac says mac-roman when utf-8 is what is required
+        if encoding == 'mac-roman':
+            encoding = 'utf-8'
+
     if encoding is None:
         encoding = 'iso8859-1'
 
diff -Nru svn-workbench-1.6.2/Source/wb_shell_commands.py svn-workbench-1.6.6/Source/wb_shell_commands.py
--- svn-workbench-1.6.2/Source/wb_shell_commands.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_shell_commands.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_shell_macosx_commands.py svn-workbench-1.6.6/Source/wb_shell_macosx_commands.py
--- svn-workbench-1.6.2/Source/wb_shell_macosx_commands.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_shell_macosx_commands.py	2011-01-05 03:50:40.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -15,6 +15,8 @@
 import subprocess
 import xml.sax.saxutils
 
+import wb_platform_specific
+
 __sigchld_handler_installed = False
 
 def getTerminalProgramList():
@@ -24,12 +26,12 @@
     return ['Finder']
 
 def GuiDiffFiles( app, options ):
-    cmd_line = "'%s' %s &" % (app.prefs.getDiffTool().gui_diff_tool, options)
+    cmd_line = u"'%s' %s &" % (app.prefs.getDiffTool().gui_diff_tool, options)
     app.log.info( cmd_line )
     __run_command_with_output( cmd_line )
 
 def ShellDiffFiles( app, options ):
-    cmd_line = "'%s' %s" % (app.prefs.getDiffTool().shell_diff_tool, options)
+    cmd_line = u"'%s' %s" % (app.prefs.getDiffTool().shell_diff_tool, options)
     app.log.info( cmd_line )
     return __run_command_with_output( cmd_line )
 
@@ -38,30 +40,31 @@
 
     if p.editor_image:
         if p.editor_options:
-            command_line = '"%s" %s "%s" &' % \
-                (p.editor_image, p.editor_options, filename)
+            command_line = (u'"%s" %s "%s" &' %
+                (p.editor_image, p.editor_options, filename))
         else:
-            command_line = '"%s" "%s" &' % \
-                (p.editor_image, filename)
+            command_line = (u'"%s" "%s" &' %
+                (p.editor_image, filename))
     else:
-        command_line = '"open" -e "%s" &' % filename
+        command_line = (u'"open" -e "%s" &' %
+                            (filename,))
 
     app.log.info( command_line )
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
-        os.system( command_line )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
+        os.system( command_line.encode( 'utf-8' ) )
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def ShellOpen( app, project_info, filename ):
     app.log.info( T_('Open %s') % filename )
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
-        __run_command_with_output( 'open "%s"' % filename )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
+        __run_command_with_output( u'open "%s"' % (filename,) )
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def CommandShell( app, project_info ):
     p = app.prefs.getShell()
@@ -83,13 +86,12 @@
         title.append( pi.project_name )
         pi = pi.parent
 
-    commands = 'cd "%s"' % working_dir
+    commands = u'cd "%s"' % working_dir
 
     if len( p.shell_init_command ) > 0:
-        commands = commands + ';. "%s"\n' % p.shell_init_command
+        commands = commands + u';. "%s"\n' % p.shell_init_command
 
-    f  = open( shell_script_filename, 'w' )
-    f.write( '''
+    contents = u'''
 tell application "iTerm"
     activate 
 
@@ -116,10 +118,13 @@
 
 end
 ''' %   (' '.join( title ).replace( '"', '\\"' )
-        ,commands.replace( '"', '\\"' )) )
+        ,commands.replace( '"', '\\"' ))
+
+    f = wb_platform_specific.uOpen( shell_script_filename, 'w' )
+    f.write( contents.encode( 'utf-8' ) )
     f.close()
 
-    command_line = '"osascript" "%s" &' % shell_script_filename
+    command_line = u'"osascript" "%s" &' % shell_script_filename
 
     app.log.info( command_line )
     __run_command_with_output( command_line )
@@ -137,13 +142,12 @@
         title.append( pi.project_name )
         pi = pi.parent
 
-    commands = 'cd "%s"' % working_dir
+    commands = u'cd "%s"' % working_dir
 
     if len( p.shell_init_command ) > 0:
         commands = commands + ';. "%s"\n' % p.shell_init_command
 
-    f  = open( shell_script_filename, 'w' )
-    f.write( '''<?xml version="1.0" encoding="UTF-8"?>
+    contents = u'''<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
 <plist version="1.0">
 <dict>
@@ -158,16 +162,20 @@
     </array>
 </dict>
 </plist>
-''' % (xml.sax.saxutils.escape( ' '.join( title ) ), xml.sax.saxutils.escape( commands )) )
+''' %   (xml.sax.saxutils.escape( ' '.join( title ) )
+        ,xml.sax.saxutils.escape( commands ))
+
+    f  = wb_platform_specific.uOpen( shell_script_filename, 'w' )
+    f.write( contents.encode( 'utf-8' ) )
     f.close()
 
-    command_line = '"open" "%s" &' % shell_script_filename
+    command_line = u'"open" "%s" &' % shell_script_filename
 
     app.log.info( command_line )
     __run_command_with_output( command_line )
 
 def FileBrowser( app, project_info ):
-    command_line = 'open -a "Finder" "%s" &' % project_info.getWorkingDir()
+    command_line = u'open -a "Finder" "%s" &' % project_info.getWorkingDir()
 
     app.log.info( command_line )
     __run_command_with_output( command_line )
@@ -217,11 +225,11 @@
     print '%s, rc=%d' % (err_prefix, rc)
 
 def __run_command_with_output( command_line ):
-    err_prefix = 'error running %s' % command_line
+    err_prefix = u'error running %s' % command_line
 
     try:
         proc = subprocess.Popen(
-                    command_line,
+                    command_line.encode( 'utf-8' ),
                     shell=True,
                     close_fds=True,
                     stdin=subprocess.PIPE,
diff -Nru svn-workbench-1.6.2/Source/wb_shell_unix_commands.py svn-workbench-1.6.6/Source/wb_shell_unix_commands.py
--- svn-workbench-1.6.2/Source/wb_shell_unix_commands.py	2009-10-11 22:00:29.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_shell_unix_commands.py	2011-01-05 03:50:40.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -13,11 +13,14 @@
 import os
 import signal
 import subprocess
+import types
+
+import wb_platform_specific
 
 __sigchld_handler_installed = False
 
 gui_terminals = ['gnome-terminal', 'konsole', 'xterm', 'xfce4-terminal']
-gui_file_browsers = ['nautilus', 'konqueror', 'thunar']
+gui_file_browsers = ['nautilus', 'konqueror', 'thunar', 'dolphin']
 
 def getTerminalProgramList():
     return gui_terminals[:]
@@ -41,20 +44,20 @@
 
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
         __run_command( app, editor_image, editor_args )
 
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def ShellOpen( app, project_info, filename ):
     app.log.info( T_('Open %s') % filename )
     cur_dir = os.getcwd()
     try:
-        os.chdir( project_info.getWorkingDir() )
-        os.system( "gnome-open '%s'" % filename )
+        wb_platform_specific.uChdir( project_info.getWorkingDir() )
+        os.system( "xdg-open '%s'" % filename )
     finally:
-        os.chdir( cur_dir )
+        wb_platform_specific.uChdir( cur_dir )
 
 def GuiDiffFiles( app, options ):
     cmd_line = "'%s' %s &" % (app.prefs.getDiffTool().gui_diff_tool, options)
@@ -79,7 +82,7 @@
         title.append( pi.project_name )
         pi = pi.parent
 
-    f  = open( shell_script_filename, 'w' )
+    f  = wb_platform_specific.uOpen( shell_script_filename, 'w' )
     f.write( 'export WB_WD="%s"\n' % working_dir )
     f.write( 'cd "%s"\n' % working_dir )
 
@@ -105,10 +108,12 @@
 
     if terminal_program == 'konsole':
         __run_command( app, terminal_program,
-            ['-T',  ' '.join( title ), '--workdir', working_dir, '-e', shell_script_filename] )
+            ['--title',  ' '.join( title ), '--workdir', working_dir, '-e', '/bin/sh', shell_script_filename] )
+
     elif terminal_program in ('gnome-terminal', 'xfce4-terminal'):
         __run_command( app, terminal_program,
             ['--title',  ' '.join( title ), '--working-directory', working_dir, '-x', shell_script_filename] )
+
     elif terminal_program == 'xterm':
         __run_command( app, terminal_program,
             ['-T',  ' '.join( title ), '-e', shell_script_filename] )
@@ -130,9 +135,10 @@
     if not found:
         return
 
-    if browser_program == 'konsole':
+    if browser_program == 'konqueror':
         __run_command( app, browser_program, ['--mimetype', 'inode/directory', project_info.getWorkingDir()] )
-    elif browser_program in ('nautilus', 'thunar'):
+
+    elif browser_program in ('nautilus', 'thunar', 'dolphin'):
         __run_command( app, browser_program, [project_info.getWorkingDir()] )
 
 def __run_command( app, cmd, args ):
@@ -158,8 +164,17 @@
         signal.signal( signal.SIGCHLD, __sigchld_handler )
         __sigchld_handler_installed = True
 
+    cmd = asUtf8( cmd )
+    args = [asUtf8( arg ) for arg in args]
+
     os.spawnvpe( os.P_NOWAIT, cmd, [cmd]+args, env )
 
+def asUtf8( s ):
+    if type( s ) == types.UnicodeType:
+        return s.encode( 'utf-8' )
+    else:
+        return s
+
 def __sigchld_handler( signum, frame ):
     try:
         while True:
diff -Nru svn-workbench-1.6.2/Source/wb_shell_win32_commands.py svn-workbench-1.6.6/Source/wb_shell_win32_commands.py
--- svn-workbench-1.6.2/Source/wb_shell_win32_commands.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_shell_win32_commands.py	2011-02-28 01:16:53.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -16,6 +16,8 @@
 import os
 import string
 import subprocess
+import wb_platform_specific
+
 
 def getTerminalProgramList():
     return ['CMD']
@@ -28,13 +30,14 @@
 
     if p.editor_image:
         if p.editor_options:
-            command_line = '"%s" %s "%s"' % \
-                (p.editor_image, p.editor_options, filename)
+            command_line = (u'"%s" %s "%s"' %
+                (p.editor_image, p.editor_options, filename))
         else:
-            command_line = '"%s" "%s"' % \
-                (p.editor_image, filename)
+            command_line = (u'"%s" "%s"' %
+                (p.editor_image, filename))
     else:
-        command_line = '"notepad.exe" "%s"' % filename
+        command_line = (u'"notepad.exe" "%s"' %
+                            (filename,))
 
     app.log.info( command_line )
     CreateProcess( app, command_line, project_info.getWorkingDir() )
@@ -45,7 +48,9 @@
     CreateProcess( app, cmd_line, os.path.curdir )
 
 def ShellDiffFiles( app, options ):
-    cmd_line = '"%s" %s' % (app.prefs.getDiffTool().shell_diff_tool, options)
+    cmd_line = (u'"%s" %s' %
+                    (app.prefs.getDiffTool().shell_diff_tool
+                    ,options))
     app.log.info( cmd_line )
     return __run_command_with_output( cmd_line )
 
@@ -78,23 +83,28 @@
         title.append( pi.project_name )
         pi = pi.parent
 
-    f  = open( shell_script_filename, 'w' )
-    f.write( "@title %s\n" % string.join( title, ' ' ) )
-    f.write( "@set PYTHONPATH=\n" )
-    f.write( '@cd %s\n' % working_dir )
-    f.write( '@echo on\n' )
-
+    cmd_lines = [
+        u"@title %s\n" % (' '.join( title ),),
+        u"@set PYTHONPATH=\n",
+        u'@cd %s\n' % (working_dir,),
+        u'@echo on\n',
+        ]
     if len( p.shell_init_command ) > 0:
-        f.write( 'call %s\n' % p.shell_init_command )
+        cmd_lines.append( u'call %s\n' % (p.shell_init_command,) )
+
+    f  = open( shell_script_filename, 'w' )
+    for line in cmd_lines:
+        f.write( line.encode( 'utf-8' ) )
     f.close()
 
-    command_line = '"%s" /k %s' % (os.environ['ComSpec'], shell_script_filename)
+    command_line = u'"%s" /k %s' % (os.environ['ComSpec'], shell_script_filename)
 
     app.log.info( command_line )
     CreateProcess( app, command_line, working_dir )
 
 def FileBrowser( app, project_info ):
-    command_line = 'explorer.exe /e,%s' % project_info.getWorkingDir()
+    command_line = (u'explorer.exe /e,%s' %
+                        (project_info.getWorkingDir(),))
 
     app.log.info( command_line )
     CreateProcess( app, command_line, project_info.getWorkingDir() )
@@ -125,7 +135,7 @@
                             ,'reason': detail} )
 
 def ensureDirectory( app, current_dir ):
-    if not os.path.exists( current_dir ):
+    if not wb_platform_specific.uPathExists( current_dir ):
         try:
             os.makedirs( current_dir )
             app.log.info( T_('Created directory %s') % current_dir )
@@ -136,7 +146,7 @@
                             ,'error': e} )
             return 0
 
-    elif not os.path.isdir( current_dir ):
+    elif not wb_platform_specific.uPathIsdir( current_dir ):
         app.log.error( T_('%s is not a directory') % current_dir )
         return 0
 
diff -Nru svn-workbench-1.6.2/Source/wb_show_diff_frame.py svn-workbench-1.6.6/Source/wb_show_diff_frame.py
--- svn-workbench-1.6.2/Source/wb_show_diff_frame.py	2009-10-12 01:36:44.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_show_diff_frame.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -23,6 +23,10 @@
 
         # fix up line endings CRLF to LF and CR to LF
         text = raw_text.replace( '\r\n', '\n' ).replace( '\r', '\n' )
+        try:
+            text = text.decode( 'utf-8' )
+        except ValueError:
+            pass
 
         diff_prefs = app.prefs.getDiffWindow()
 
diff -Nru svn-workbench-1.6.2/Source/wb_source_control_providers.py svn-workbench-1.6.6/Source/wb_source_control_providers.py
--- svn-workbench-1.6.2/Source/wb_source_control_providers.py	2009-03-08 01:14:14.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_source_control_providers.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_annotate.py svn-workbench-1.6.6/Source/wb_subversion_annotate.py
--- svn-workbench-1.6.2/Source/wb_subversion_annotate.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_annotate.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_checkin.py svn-workbench-1.6.6/Source/wb_subversion_checkin.py
--- svn-workbench-1.6.2/Source/wb_subversion_checkin.py	2009-10-03 17:21:08.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_checkin.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2006-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2006-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -30,7 +30,7 @@
 
 class CheckinFrame(wx.Frame):
     def __init__( self, app, project_info, all_files ):
-        wx.Frame.__init__( self, None, -1, T_('Check in for %s') % project_info.wc_path, size=(700,500) )
+        wx.Frame.__init__( self, None, -1, T_('Check in for %s') % project_info.wc_path, size=(1000,500) )
 
         self.app = app
 
@@ -110,7 +110,7 @@
         self.last_log_message_text = None
 
         try:
-            f = file( self.message_filename, 'r' )
+            f = wb_platform_specific.uOpen( self.message_filename, 'r' )
             self.last_log_message_text = f.read().decode('utf-8').strip()
             f.close()
         except EnvironmentError:
@@ -232,7 +232,7 @@
 
         message = self.log_message_ctrl.GetValue().encode('utf-8')
         try:
-            f = file( self.message_filename, 'w' )
+            f = wb_platform_specific.uOpen( self.message_filename, 'w' )
             f.write( message )
             f.close()
         except EnvironmentError:
@@ -329,7 +329,10 @@
 
         self.all_excluded_files = {}
         self.__parent = parent
-        
+
+    def overrideColumnInfo( self ):
+        self.column_info.setColumnWidth( 'Name', self.column_info.getColumnWidth( 'Name' ) + 20 )
+
     def getContextMenu( self ):
         menu_template = [
             ('', wb_ids.id_File_Edit, T_('Edit') )
@@ -398,7 +401,7 @@
 
         # Set the project files to be this new list
         self.project_info.all_files = all_files
-            
+
 class CheckinProjectInfo:
     def __init__( self, project_info, all_files ):
         self.all_files = all_files
@@ -407,6 +410,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_diff.py svn-workbench-1.6.6/Source/wb_subversion_diff.py
--- svn-workbench-1.6.2/Source/wb_subversion_diff.py	2009-04-13 19:35:09.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_diff.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -20,6 +20,7 @@
 import wb_show_diff_frame
 import wb_read_file
 import wb_diff_frame
+import wb_platform_specific
 
 debug_diff = False
 
@@ -93,18 +94,18 @@
     for path_info in (old_path_info, new_path_info):
         if( path_info.revision is None
         or path_info.revision.kind == pysvn.opt_revision_kind.working ):
-            if not os.path.exists( path_info.path ):
+            if not wb_platform_specific.uPathExists( path_info.path ):
                 app.log_error( '"%s" does not exist.' % path_info.path )
                 fd, path_info.path = tempfile.mkstemp( suffix=os.path.basename( path_info.path ) )
                 os.close( fd )
                 # keep track of the temp file
                 app.all_temp_files.append( path_info.path )
 
-            if os.path.isdir( path_info.path ):
+            if wb_platform_specific.uPathIsdir( path_info.path ):
                 app.log_error( '"%s" refers to a directory.' % path_info.path )
                 return
 
-            if not os.access( path_info.path, os.R_OK ):
+            if not wb_platform_specific.uAccess( path_info.path, os.R_OK ):
                 app.log_error( '"%s" cannot be read.' % path_info.path )
                 return
 
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_history.py svn-workbench-1.6.6/Source/wb_subversion_history.py
--- svn-workbench-1.6.2/Source/wb_subversion_history.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_history.py	2011-01-05 03:50:40.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -17,6 +17,7 @@
 import os
 import time
 import types
+import urllib
 
 import pysvn
 
@@ -53,7 +54,10 @@
         self.author = author
         self.date = date
         self.label = label
-        self.message = message
+        try:
+            self.message = message.decode( 'utf-8' )
+        except ValueError:
+            self.message = message
         self.changed_paths = changed_paths
 
         self.changed_paths.sort( self.by_changed_path )
@@ -70,14 +74,22 @@
 
         if filter_field == T_('Author'):
             return filter_text.lower() in self.author.lower()
+
         elif filter_field == T_('Comment'):
             return filter_text.lower() in self.message.lower()
+
         elif filter_field == T_('Path'):
             for changed_path in self.changed_paths:
-                if filter_text.lower() in changed_path.path.lower():
+                try:
+                    c_p_p = changed_path.path.decode('utf-8')
+                except ValueError:
+                    c_p_p = changed_path.path
+
+                if filter_text.lower() in c_p_p.lower():
                     return True
 
             return False
+
         else:
             assert( False )
             return False
@@ -101,7 +113,8 @@
     if len( all_log_entries ) == 0:
         return info.URL, all_history_entries
 
-    repos_path = info.URL[len(info.repos_root_URL):]
+    repos_path = urllib.unquote( info.URL[len(info.repos_root_URL):].encode( 'utf-8' ) )
+
     for log in all_log_entries:
         # author is optional
         if 'author' not in log:
@@ -110,7 +123,7 @@
         all_history_entries.append(
             LogEntry(
                 log.revision.number,
-                info.repos_root_URL+repos_path,
+                info.URL,
                 log.author,
                 log.date,
                 '',
@@ -119,7 +132,11 @@
 
         for changed_path in log.changed_paths:
             if changed_path.action in ['A','M']:
-                if repos_path == changed_path.path:
+                if changed_path.path is not None:
+                    c_p_p = changed_path.path.decode( 'utf-8' )
+                else:
+                    c_p_p = None
+                if repos_path == c_p_p:
                     if changed_path.copyfrom_path is not None:
                         repos_path = changed_path.copyfrom_path
                     break
@@ -484,7 +501,7 @@
         # Arrange the panels with the splitter windows
         self.splitter.AppendWindow( self.panel_history, 250 )
         self.splitter.AppendWindow( self.panel_comment, 100 )
-        self.splitter.AppendWindow( self.panel_changed_paths, 150 )
+        self.splitter.AppendWindow( self.panel_changed_paths, 200 )
 
         self.selected_revisions = {}
 
@@ -508,7 +525,7 @@
         char_width = 9
         self.list_ctrl.SetColumnWidth( self.col_revision, 7*char_width )
         self.list_ctrl.SetColumnWidth( self.col_author, 14*char_width )
-        self.list_ctrl.SetColumnWidth( self.col_date, 15*char_width )
+        self.list_ctrl.SetColumnWidth( self.col_date, 18*char_width )
         self.list_ctrl.SetColumnWidth( self.col_label, 12*char_width )
         self.list_ctrl.SetColumnWidth( self.col_message, 40*char_width )
 
@@ -525,9 +542,9 @@
 
         char_width = 9
         self.paths_ctrl.SetColumnWidth( self.col_action, 7*char_width )
-        self.paths_ctrl.SetColumnWidth( self.col_path, 40*char_width )
+        self.paths_ctrl.SetColumnWidth( self.col_path, 60*char_width )
         self.paths_ctrl.SetColumnWidth( self.col_copyfrom_revision, 6*char_width )
-        self.paths_ctrl.SetColumnWidth( self.col_copyfrom_path, 40*char_width )
+        self.paths_ctrl.SetColumnWidth( self.col_copyfrom_path, 60*char_width )
 
         self.initButtons( self.v_sizer_history )
 
@@ -686,7 +703,7 @@
             self.paths_ctrl.InsertStringItem( index,
                 action_map.get( info.action, info.action ) )
             self.paths_ctrl.SetStringItem( index, self.col_path,
-                info.path )
+                info.path.decode( 'utf-8' ) )
             if info.copyfrom_path is not None:
                 self.paths_ctrl.SetStringItem( index, self.col_copyfrom_revision,
                     str( info.copyfrom_revision.number ) )
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_info_dialog.py svn-workbench-1.6.6/Source/wb_subversion_info_dialog.py
--- svn-workbench-1.6.2/Source/wb_subversion_info_dialog.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_info_dialog.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_list_handler.py svn-workbench-1.6.6/Source/wb_subversion_list_handler.py
--- svn-workbench-1.6.2/Source/wb_subversion_list_handler.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_list_handler.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -25,6 +25,7 @@
 import wb_clipboard
 import wb_diff_frame
 import wb_dialogs
+import wb_platform_specific
 
 class SubversionListHandler(wb_subversion_list_handler_common.SubversionListHandlerCommon):
     def __init__( self, app, list_panel, project_info ):
@@ -34,9 +35,14 @@
         return '<SubversionListHandler %r>' % self.project_info
 
     def getContextMenu( self ):
-        if self.project_info.need_checkout:
+        if self.project_info.need_upgrade:
+            menu_template = \
+                [('', wb_ids.id_SP_Upgrade, T_('Upgrade') )]
+
+        elif self.project_info.need_checkout:
             menu_template = \
                 [('', wb_ids.id_SP_Checkout, T_('Checkout') )]
+
         else:
             menu_template = \
                 [('', wb_ids.id_File_Edit, T_('Edit') )]
@@ -117,7 +123,7 @@
         all_status = []
         try:
             for filename in paste_data.getAllFilenames():
-                if os.path.isdir( filename ):
+                if wb_platform_specific.uPathIsdir( filename ):
                     dir_status = self.project_info.client_bg.status( os.path.dirname( filename ), recurse=False )
                     all_status.extend( [s for s in dir_status if s.path == filename] )
                 else:
@@ -149,7 +155,7 @@
             else:
                 rename_title = T_('Rename')
 
-            while os.path.exists( new_filename ):
+            while wb_platform_specific.uPathExists( new_filename ):
                 new_name, force = self.app.renameFile( rename_title, os.path.basename( old_filename ), None )
                 if new_name is None:
                     return
@@ -168,7 +174,7 @@
 
             try:
                 if paste_data.isCopy():
-                    if os.path.isdir( old_filename ):
+                    if wb_platform_specific.uPathIsdir( old_filename ):
                         if is_controlled:
                             self.project_info.client_bg.copy( old_filename, new_filename )
                         else:
@@ -179,11 +185,11 @@
 
                     ok = True
                 else:
-                    if os.path.isdir( old_filename ):
+                    if wb_platform_specific.uPathIsdir( old_filename ):
                         if is_controlled:
                             self.project_info.client_bg.move( old_filename, new_filename, force=force )
                         else:
-                            os.rename( old_filename, new_filename )
+                            wb_platform_specific.uRename( old_filename, new_filename )
                     else:
                         text_status = self.getTextStatus( status )
                         prop_status = self.getPropStatus( status )
@@ -249,7 +255,7 @@
                 if is_controlled:
                     if text_status == pysvn.wc_status_kind.added:
                         self.project_info.client_fg.revert( filename )
-                        os.remove( filename )
+                        wb_platform_specific.uRemove( filename )
 
                     elif( text_status == pysvn.wc_status_kind.modified
                     or prop_status == pysvn.wc_status_kind.modified ):
@@ -260,7 +266,7 @@
                         self.project_info.client_fg.remove( filename )
 
                 else:
-                    os.remove( filename )
+                    wb_platform_specific.uRemove( filename )
 
             except pysvn.ClientError, e:
                 self.app.log_client_error( e )
@@ -301,7 +307,7 @@
     def __copyFile( self, old_filename, new_full_filename, is_controlled, text_status, prop_status ):
         if not is_controlled:
             raise EnvironmentError( 'TBD - copy file' )
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             return
 
         if( text_status == pysvn.wc_status_kind.normal
@@ -312,7 +318,7 @@
 
     def __moveFile( self, old_filename, new_full_filename, is_controlled, text_status, prop_status ):
         if not is_controlled:
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             return
 
         if text_status == pysvn.wc_status_kind.added:
@@ -323,7 +329,7 @@
             print( T_('Rename %(from)s %(to)s') %
                     {'from': old_filename
                     ,'to': new_full_filename} )
-            os.rename( old_filename, new_full_filename )
+            wb_platform_specific.uRename( old_filename, new_full_filename )
             self.project_info.client_fg.add( new_full_filename )
 
             # all_prop_lists is empty if there are no properties set
@@ -339,7 +345,7 @@
             for tmp_name_index in range( 100 ):
                 tmp_filename = os.path.join( os.path.dirname( old_filename ),
                     '%s.%d.tmp' % (new_full_filename, tmp_name_index) )
-                if not os.path.exists( tmp_filename ):
+                if not wb_platform_specific.uPathExists( tmp_filename ):
                     new_full_tmp_filename = tmp_filename
                     break
 
@@ -353,15 +359,15 @@
                 print( T_('Rename %(from)s %(to)s') %
                         {'from': old_filename
                         ,'to': new_full_tmp_filename} )
-                os.rename( old_filename, new_full_tmp_filename )
+                wb_platform_specific.uRename( old_filename, new_full_tmp_filename )
                 self.project_info.client_fg.revert( old_filename )
                 self.project_info.client_fg.move( old_filename, new_full_filename )
-                os.remove( new_full_filename )
+                wb_platform_specific.uRemove( new_full_filename )
 
                 print( T_('Rename %(from)s %(to)s') %
                             {'from': new_full_tmp_filename
                             ,'to': new_full_tmp_filename} )
-                os.rename( new_full_tmp_filename, new_full_filename )
+                wb_platform_specific.uRename( new_full_tmp_filename, new_full_filename )
 
                 if len(all_props) > 0:
                     _, prop_dict = all_props[0]
@@ -460,8 +466,11 @@
 
         if self.project_info.notification_of_files_in_conflict > 0:
             wx.MessageBox( S_("%d file is in conflict", 
-                              "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
-                T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
+                              "%d files are in conflict",
+                              self.project_info.notification_of_files_in_conflict) %
+                                    self.project_info.notification_of_files_in_conflict,
+                        T_("Warning"),
+                        style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
@@ -513,8 +522,11 @@
 
         if self.project_info.notification_of_files_in_conflict > 0:
             wx.MessageBox( S_("%d file is in conflict", 
-                              "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
-                              T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
+                              "%d files are in conflict",
+                              self.project_info.notification_of_files_in_conflict) %
+                                    self.project_info.notification_of_files_in_conflict,
+                            T_("Warning"),
+                            style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_list_handler_common.py svn-workbench-1.6.6/Source/wb_subversion_list_handler_common.py
--- svn-workbench-1.6.2/Source/wb_subversion_list_handler_common.py	2009-10-03 19:22:02.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_list_handler_common.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -26,6 +26,7 @@
 import wb_subversion_properties_dialog
 import wb_subversion_diff
 import wb_config
+import wb_platform_specific
 
 col_labels = [
         ('Name',            U_('Name'),        25, 10, 100, wx.LIST_FORMAT_LEFT),
@@ -106,6 +107,15 @@
         for index, name in enumerate( self.column_order ):
             self.column_info_by_name[ name ].column = index
 
+    def getColumnWidth( self, column_name ):
+        return self.column_info_by_name[ column_name ].width
+
+    def setColumnWidth( self, column_name, width ):
+        info = self.column_info_by_name[ column_name ]
+        width = max( info.min_width, width )
+        width = min( info.max_width, width )
+        info.width = width
+
     def getColumnOrder( self ):
         return self.column_order
 
@@ -200,6 +210,10 @@
 
     def setupColumnInfo( self ):
         self.column_info.setFromPreferenceData( self.app.prefs.getView() )
+        self.overrideColumnInfo()
+
+    def overrideColumnInfo( self ):
+        pass
 
     def setupColumns( self ):
         self.setupColumnInfo()
@@ -228,8 +242,9 @@
 
         self.list_panel.updateHeader( self.project_info.url, self.project_info.wc_path )
 
-        # nothing doing if the wc does not exist
-        if self.project_info.need_checkout:
+        # nothing doing if the wc does not exist or needs upgrade
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             # empty the list
             g.DeleteAllItems()
 
@@ -283,7 +298,8 @@
     def sortList( self, sort_data ):
         self.app.log.debug('sortList' )
 
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             # nothing to sort
             return
 
@@ -354,6 +370,12 @@
     def OnGetItemText( self, index, col ):
         column = self.column_info.getNameByColumn( col )
 
+        if self.project_info.need_upgrade:
+            if column == self.col_name:
+                return T_('Use the Upgrade command to convert the working copy to the required format')
+            else:
+                return ''
+
         if self.project_info.need_checkout:
             if column == self.col_name:
                 if self.isProjectParent():
@@ -404,7 +426,8 @@
         return value
 
     def OnGetItemAttr( self, index ):
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             colour = wb_config.colour_status_need_checkout
         else:
             colour = self.statusColour( self.all_files[ index ] )
@@ -417,7 +440,8 @@
         return self.all_item_attr[ colour ]
 
     def isItemImageFolder(self, item):
-        if self.project_info.need_checkout:
+        if( self.project_info.need_checkout
+        or self.project_info.need_upgrade ):
             return True
 
         elif self.GetItemIsDir( item ):
@@ -429,14 +453,14 @@
     def GetItemIsDir(self, item):
         status = self.all_files[ item ]
         if status.entry is None:
-            is_dir = os.path.isdir( status.path )
+            is_dir = wb_platform_specific.uPathIsdir( status.path )
         else:
             is_dir = status.entry.kind == pysvn.node_kind.dir
         return is_dir
     
     def __get_NameColumn( self, status, prefix_len ):
         if status.entry is None:
-            is_dir = os.path.isdir( status.path )
+            is_dir = wb_platform_specific.uPathIsdir( status.path )
         else:
             is_dir = status.entry.kind == pysvn.node_kind.dir
         if is_dir:
@@ -493,7 +517,7 @@
             return wb_subversion_utils.fmtDateTime( status.entry.commit_time )
 
     def __get_LockCommentColumn( self, status ):
-        if status.repos_lock is not None:
+        if status.repos_lock is not None and status.repos_lock.comment is not None:
             comment = status.repos_lock.comment.replace( '\n', ' ' )
         elif status.entry is not None and status.entry.lock_comment is not None:
             comment = status.entry.lock_comment.replace( '\n', ' ' )
@@ -516,6 +540,10 @@
 
         state = wb_list_panel_common.ListItemState()
 
+        if self.project_info.need_upgrade:
+            state.need_upgrade = True
+            return state
+
         if self.project_info.need_checkout:
             state.need_checkout = True
             state.ui_project_parent = True
@@ -535,10 +563,10 @@
         for row in all_rows:
             filename = self.all_files[ row ].path
 
-            if not os.path.exists( filename ):
+            if not wb_platform_specific.uPathExists( filename ):
                 state.file_exists = False
 
-            if os.path.isdir( filename ):
+            if wb_platform_specific.uPathIsdir( filename ):
                 state.modified = False
                 state.conflict = False
                 state.file_exists = False
@@ -603,7 +631,7 @@
     def mayOpen( self, row_or_status ):
         status = self.getStatusFromRowOrStatus( row_or_status )
         if status.entry is None:
-            return not os.path.isdir( self.getFilename( row_or_status ) )
+            return not wb_platform_specific.uPathIsdir( self.getFilename( row_or_status ) )
         else:
             return status.entry.kind == pysvn.node_kind.dir
 
@@ -974,7 +1002,7 @@
                     prop_dict = {}
                 else:
                     _, prop_dict = prop_list[0]
-                if os.path.isdir( filename ):
+                if wb_platform_specific.uPathIsdir( filename ):
                     dialog = wb_subversion_properties_dialog.DirPropertiesDialog( self.app,
                             self.list_panel.list_ctrl,
                             filename,
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_project_info.py svn-workbench-1.6.6/Source/wb_subversion_project_info.py
--- svn-workbench-1.6.2/Source/wb_subversion_project_info.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_project_info.py	2012-03-04 05:14:15.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2012 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -29,6 +29,8 @@
 import wb_subversion_tree_handler
 import wb_subversion_list_handler
 import wb_subversion_utils
+import wb_platform_specific
+import wb_subversion_utils
 
 _fast_proplist = True
 
@@ -48,6 +50,7 @@
 
         self.all_tree_files_status = []
         self.need_checkout = True
+        self.need_upgrade = False
         self.need_properties = False
         self.files_properties = {}
 
@@ -179,8 +182,13 @@
             self.notification_of_files_in_conflict += 1
 
         # print anything that gets through the filter
-        msg = '%s %s\n' % (action_letter, arg_dict['path'])
-        self.app.foregroundProcess( sys.stdout.write, (msg,) )
+        try:
+            path = arg_dict['path'].decode( 'utf-8' )
+        except ValueError:
+            path = arg_dict['path']
+
+        msg = u'%s %s\n' % (action_letter, path)
+        self.app.foregroundProcess( sys.stdout.write, (msg.encode( 'utf-8' ),) )
 
     def readPreferences( self, get_option ):
         wb_source_control_providers.ProjectInfo.readPreferences( self, get_option )
@@ -261,15 +269,26 @@
         self.dir_status = None
 
         self.need_checkout = True
-        if not os.path.exists( self.wc_path ):
+        if not wb_platform_specific.uPathExists( self.wc_path ):
             return
 
         p = self.app.prefs.getView()
+
         try:
+            self.need_upgrade = False
             entry = self.client_fg.info( self.wc_path )
+
         except pysvn.ClientError, e:
+            if wb_subversion_utils.version_info.has_upgrade:
+                # is it the  'Working copy XXX is too old' error?
+                if e.args[1][0][1] == pysvn.svn_err.wc_upgrade_required:
+                    self.need_checkout = False
+                    self.need_upgrade = True
+                    return
+
             # is it the  'is not a working copy' error?
             if e.args[1][0][1] == pysvn.svn_err.wc_not_directory:
+                # need_checkout
                 return
 
             print 'Error: %s' % e.args[0]
@@ -282,12 +301,14 @@
 
         self.all_files_status = self.client_fg.status( self.wc_path, recurse=p.view_recursive, ignore=False )
 
+
         self.need_checkout = False
 
         # sort list
         self.all_files_status.sort( wb_subversion_utils.by_path )
+
         # remember dir_status before filtering
-        if len(self.all_files_status) > 0 and self.all_files_status[0].path == self.wc_path:
+        if len(self.all_files_status) > 0 and os.path.normcase( self.all_files_status[0].path ) == os.path.normcase( self.wc_path ):
             self.dir_status = self.all_files_status[0]
             del self.all_files_status[0]
 
@@ -372,7 +393,7 @@
         return self.dir_status
 
     def __proplist( self, path ):
-        if os.path.isdir( path ):
+        if wb_platform_specific.uPathIsdir( path ):
             prop_file = os.path.join( path, '.svn', 'dir-props' )
             base_prop_file = os.path.join( path, '.svn', 'dir-prop-base' )
         else:
@@ -382,10 +403,10 @@
 
         result = {}
         try:
-            f = file( prop_file )
+            f = wb_platform_specific.uOpen( prop_file )
         except EnvironmentError:
             try:
-                f = file( base_prop_file )
+                f = wb_platform_specific.uOpen( base_prop_file )
             except EnvironmentError:
                 return result
 
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_properties_dialog.py svn-workbench-1.6.6/Source/wb_subversion_properties_dialog.py
--- svn-workbench-1.6.2/Source/wb_subversion_properties_dialog.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_properties_dialog.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_provider.py svn-workbench-1.6.6/Source/wb_subversion_provider.py
--- svn-workbench-1.6.2/Source/wb_subversion_provider.py	2006-01-03 01:06:03.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_provider.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2006 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_branch_changes.py svn-workbench-1.6.6/Source/wb_subversion_report_branch_changes.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_branch_changes.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_branch_changes.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2006-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2006-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -18,7 +18,6 @@
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 class ReportBranchChangesFrame(wx.Frame):
     def __init__( self, app, project_info, all_files ):
@@ -177,6 +176,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_lock.py svn-workbench-1.6.6/Source/wb_subversion_report_lock.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_lock.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_lock.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2006-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2006-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -16,13 +16,13 @@
 import time
 import pysvn
 
+import wb_config
 import wb_ids
 import wb_images
 import wb_exceptions
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 class ReportLockFrame(wx.Frame):
     def __init__( self, app, project_info, all_files, show_repos_locks=False ):
@@ -220,6 +220,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_revision_changes.py svn-workbench-1.6.6/Source/wb_subversion_report_revision_changes.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_revision_changes.py	2009-10-03 17:21:08.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_revision_changes.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2009-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -23,7 +23,6 @@
 import wb_subversion_diff
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 import wb_subversion_annotate
 import wb_subversion_info_dialog
 import wb_subversion_history
@@ -294,6 +293,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_report_updates.py svn-workbench-1.6.6/Source/wb_subversion_report_updates.py
--- svn-workbench-1.6.2/Source/wb_subversion_report_updates.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_report_updates.py	2011-11-21 01:52:09.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2006-2007 Barry A Scott.  All rights reserved.
+ Copyright (c) 2006-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -23,7 +23,6 @@
 import wb_list_panel_common
 import wb_subversion_utils
 import wb_subversion_list_handler_common
-import wb_platform_specific
 
 id_exclude = wx.NewId()
 id_include = wx.NewId()
@@ -254,6 +253,7 @@
         self.url = project_info.url
         self.wc_path = project_info.wc_path
         self.need_checkout = False
+        self.need_upgrade = False
 
         self.client_fg = project_info.client_fg
         self.client_bg = project_info.client_bg
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_tree_handler.py svn-workbench-1.6.6/Source/wb_subversion_tree_handler.py
--- svn-workbench-1.6.2/Source/wb_subversion_tree_handler.py	2009-09-20 19:51:33.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_tree_handler.py	2012-03-03 23:31:36.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -33,6 +33,7 @@
 import wb_clipboard
 import wb_dialogs
 import wb_config
+import wb_platform_specific
 
 class SubversionProject(wb_tree_panel.TreeProjectItem):
     def __init__( self, app, project_info ):
@@ -52,7 +53,7 @@
         dir_status = self.project_info.getDirStatus()
         if dir_status is None:
             # no status available - make a guess
-            if not os.path.exists( self.project_info.wc_path ):
+            if not wb_platform_specific.uPathExists( self.project_info.wc_path ):
                 # nothing there 
                 return False
             else:
@@ -61,7 +62,7 @@
 
         for file in self.project_info.getTreeFilesStatus():
             if( (file.entry is not None and file.entry.kind == pysvn.node_kind.dir)
-            or (file.entry is None and os.path.isdir( file.path )) ):
+            or (file.entry is None and wb_platform_specific.uPathIsdir( file.path )) ):
                 return True
 
         return False
@@ -71,7 +72,7 @@
 
         for file in self.project_info.getTreeFilesStatus():
 
-            if( (file.entry is None and os.path.isdir( file.path ))
+            if( (file.entry is None and wb_platform_specific.uPathIsdir( file.path ))
             or (file.entry is not None and file.entry.kind == pysvn.node_kind.dir) ):
                 pi = wb_subversion_project_info.ProjectInfo( self.app, self.project_info )
                 name = os.path.basename( file.path )
@@ -92,17 +93,17 @@
         dir_status = self.project_info.getDirStatus()
         if dir_status is None:
             # no status available - make a guess
-            if not os.path.exists( self.project_info.wc_path ):
+            if not wb_platform_specific.uPathExists( self.project_info.wc_path ):
                 # nothing there
                 return wb_config.colour_status_need_checkout
-            elif not os.path.exists( os.path.join( self.project_info.wc_path, '.svn' ) ):
+            elif not wb_platform_specific.uPathExists( os.path.join( self.project_info.wc_path, '.svn' ) ):
                 # not versioned
                 return wb_config.colour_status_unversioned
             else:
                 # versioned and present
                 return wb_config.colour_status_normal
 
-        elif not os.path.exists( dir_status.path ):
+        elif not wb_platform_specific.uPathExists( dir_status.path ):
             # nothing there
             return wb_config.colour_status_need_checkout
         elif dir_status.text_status in [pysvn.wc_status_kind.unversioned, pysvn.wc_status_kind.ignored]:
@@ -126,6 +127,7 @@
             state.unversioned = False
             state.need_checkin = False
             state.need_checkout = True
+            state.need_upgrade = False
             state.conflict = False
             state.file_exists = False
             state.revertable = False
@@ -137,10 +139,11 @@
             state.unversioned = True
             state.need_checkin = True
             state.need_checkout = False
+            state.need_upgrade = False
             state.conflict = True
             state.file_exists = True
 
-            if not os.path.exists( dir_status.path ):
+            if not wb_platform_specific.uPathExists( dir_status.path ):
                 state.file_exists = False
 
             text_status = dir_status.text_status
@@ -539,7 +542,7 @@
             and dialog.getTemplateFilename() is not None ):
                 try:
                     template_filename = os.path.join( template_dir, dialog.getTemplateFilename() )
-                    t = file( template_filename, 'r' )
+                    t = wb_platform_specific.uOpen( template_filename, 'r' )
                     template_contents = t.read()
                     t.close()
 
@@ -551,7 +554,7 @@
 
             try:
                 new_filename = os.path.join( self.project_info.wc_path, dialog.getNewFilename() )
-                f = file( new_filename, 'w' )
+                f = wb_platform_specific.uOpen( new_filename, 'w' )
                 f.write( template_contents )
                 f.close()
 
@@ -799,7 +802,7 @@
                     self.app.log_client_error( e )
             else:
                 try:
-                    os.rename( old_filename, new_full_filename )
+                    wb_platform_specific.uRename( old_filename, new_full_filename )
                 except (OSError,IOError), e:
                     self.app.log.error( str(e) )
 
@@ -887,11 +890,26 @@
 
             if self.project_info.notification_of_files_in_conflict > 0:
                 wx.MessageBox( S_("%d file is in conflict", 
-                                  "%d files are in conflict", self.project_info.notification_of_files_in_conflict) % self.project_info.notification_of_files_in_conflict,
+                                  "%d files are in conflict",
+                                  self.project_info.notification_of_files_in_conflict) %
+                                        self.project_info.notification_of_files_in_conflict,
                                T_("Warning"), style=wx.OK|wx.ICON_EXCLAMATION )
 
         self.app.clearProgress()
         self.app.setAction( T_('Ready') )
+        self.app.refreshFrame()
+
+    def Cmd_Dir_Upgrade( self ):
+        self.app.setAction( T_('Upgrade %s...') % self.project_info.wc_path )
+
+        try:
+            self.project_info.client_fg.upgrade( self.project_info.wc_path )
+
+        except pysvn.ClientError, e:
+            self.app.log_client_error( e )
+
+        self.app.clearProgress()
+        self.app.setAction( T_('Ready') )
         self.app.refreshFrame()
 
     def Cmd_Dir_Copy( self, all_filenames ):
diff -Nru svn-workbench-1.6.2/Source/wb_subversion_utils.py svn-workbench-1.6.6/Source/wb_subversion_utils.py
--- svn-workbench-1.6.2/Source/wb_subversion_utils.py	2009-09-14 01:02:30.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_subversion_utils.py	2011-11-21 07:37:53.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -25,6 +25,8 @@
         self.notify_action_has_failed_lock = hasattr( pysvn.wc_notify_action, 'failed_lock' )
         self.has_depth = hasattr( pysvn, 'depth' )
         self.notify_action_has_property_events = hasattr( pysvn.wc_notify_action, 'property_added' )
+        self.notify_action_has_upgrade_events = hasattr( pysvn.wc_notify_action, 'upgraded_path' )
+        self.has_upgrade = self.notify_action_has_upgrade_events
 
 version_info = svn_version_info()
 
@@ -150,6 +152,33 @@
     wc_notify_action_map[ pysvn.wc_notify_action.tree_conflict ] = 'tree_conflict'
     wc_notify_action_map[ pysvn.wc_notify_action.failed_external ] = 'failed_external'
 
+if version_info.notify_action_has_upgrade_events:
+    wc_notify_action_map[ pysvn.wc_notify_action.upgraded_path ] = 'upgraded_path'
+    wc_notify_action_map[ pysvn.wc_notify_action.update_started ] = "update_started"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_skip_obstruction ] = "update_skip_obstruction"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_skip_working_only ] = "update_skip_working_only"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_external_removed ] = "update_external_removed"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_add ] = "update_shadowed_add"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_update ] = "update_shadowed_update"
+    wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_delete ] = "update_shadowed_delete"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info ] = "merge_record_info"
+    wc_notify_action_map[ pysvn.wc_notify_action.upgraded_path ] = "upgraded_path"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info_begin ] = "merge_record_info_begin"
+    wc_notify_action_map[ pysvn.wc_notify_action.merge_elide_info ] = "merge_elide_info"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch ] = "patch"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_applied_hunk ] = "patch_applied_hunk"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_rejected_hunk ] = "patch_rejected_hunk"
+    wc_notify_action_map[ pysvn.wc_notify_action.patch_hunk_already_applied ] = "patch_hunk_already_applied"
+    wc_notify_action_map[ pysvn.wc_notify_action.commit_copied ] = "commit_copied"
+    wc_notify_action_map[ pysvn.wc_notify_action.commit_copied_replaced ] = "commit_copied_replaced"
+    wc_notify_action_map[ pysvn.wc_notify_action.url_redirect ] = "url_redirect"
+    wc_notify_action_map[ pysvn.wc_notify_action.path_nonexistent ] = "path_nonexistent"
+    wc_notify_action_map[ pysvn.wc_notify_action.exclude ] = "exclude"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_conflict ] = "failed_conflict"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_missing ] = "failed_missing"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_out_of_date ] = "failed_out_of_date"
+    wc_notify_action_map[ pysvn.wc_notify_action.failed_no_parent ] = "failed_no_parent"
+
 wc_notify_type_map = {
     pysvn.wc_notify_action.add: 'A',
     pysvn.wc_notify_action.commit_added: 'C',
@@ -191,6 +220,32 @@
     wc_notify_type_map[ pysvn.wc_notify_action.tree_conflict ] = None
     wc_notify_type_map[ pysvn.wc_notify_action.failed_external ] = None
 
+if version_info.notify_action_has_upgrade_events:
+    wc_notify_type_map[ pysvn.wc_notify_action.upgraded_path ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_started ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_skip_obstruction ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_skip_working_only ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_external_removed ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_add ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_update ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.update_shadowed_delete ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_record_info ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.upgraded_path ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_record_info_begin ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.merge_elide_info ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_applied_hunk ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_rejected_hunk ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.patch_hunk_already_applied ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.commit_copied ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.commit_copied_replaced ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.url_redirect ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.path_nonexistent ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.exclude ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_conflict ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_missing ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_out_of_date ] = None
+    wc_notify_type_map[ pysvn.wc_notify_action.failed_no_parent ] = None
 
 #
 #    format the concise status from file
diff -Nru svn-workbench-1.6.2/Source/wb_toolbars.py svn-workbench-1.6.6/Source/wb_toolbars.py
--- svn-workbench-1.6.2/Source/wb_toolbars.py	2009-09-20 18:59:25.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_toolbars.py	2010-12-31 02:50:13.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2009-2010 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
diff -Nru svn-workbench-1.6.2/Source/wb_tree_panel.py svn-workbench-1.6.6/Source/wb_tree_panel.py
--- svn-workbench-1.6.2/Source/wb_tree_panel.py	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_tree_panel.py	2012-07-25 06:31:59.000000000 +0900
@@ -1,6 +1,6 @@
 '''
  ====================================================================
- Copyright (c) 2003-2009 Barry A Scott.  All rights reserved.
+ Copyright (c) 2003-2011 Barry A Scott.  All rights reserved.
 
  This software is licensed as described in the file LICENSE.txt,
  which you should have received as part of this distribution.
@@ -35,6 +35,7 @@
         self.unversioned = False
         self.need_checkin = False
         self.need_checkout = False
+        self.need_upgrade = False
         self.conflict = False
         self.file_exists = False
         self.is_folder = True
@@ -127,13 +128,11 @@
         dc.Clear()
         w, h = self.GetSize()
         if self.FindFocus() == self.tree_ctrl:
-            print 'tree focus'
             dc.SetPen( wx.Pen( "red", 1 ) )
             dc.DrawRectangle( 0, 0, w, h )
         else:
             dc.SetPen( wx.Pen( "green", 1 ) )
             dc.DrawRectangle( 0, 0, w, h )
-            print 'tree unfocus'
         event.Skip()
 
     def initFrame( self ):
@@ -266,6 +265,7 @@
 
         if first_item:
             self.tree_ctrl.SelectItem( first_item )
+            # QQQ: EnsureVisible causes an assert in wxPython 2.8.12.1 on Mac OS X
             self.tree_ctrl.EnsureVisible( first_item )
 
     def updateTreeSelectedItem( self ):
@@ -318,12 +318,14 @@
         child_item, cookie = self.tree_ctrl.GetFirstChild( this_item )
         while child_item:
             child_handler = self.tree_ctrl.GetPyData( child_item )
+            # Since WX 2.8.11.1 need to call updateStatus() here - guess that a callback sequence changed
+            child_handler.updateStatus()
             self.tree_ctrl.SetItemHasChildren( child_item, child_handler.mayExpand() )
             self.tree_ctrl.SetItemTextColour( child_item, child_handler.getTreeNodeColour() )
 
             child_item, cookie = self.tree_ctrl.GetNextChild( this_item, cookie )
 
-        # set the has children state
+        # set the has-children state
         self.tree_ctrl.SetItemHasChildren( this_item, len(project_info_list) > 0 )
 
     def gotoBookmark( self, bookmark_name ):
@@ -768,6 +770,9 @@
     def OnSpUpdateTo( self ):
         return self.Sp_Dispatch( 'Cmd_Dir_UpdateTo' )
 
+    def OnSpUpgrade( self ):
+        return self.Sp_Dispatch( 'Cmd_Dir_Upgrade' )
+
     #----------------------------------------
     def OnSpCopy( self, filename_list ):
         return self.Sp_DispatchDrop( 'Cmd_Dir_Copy', filename_list )
diff -Nru svn-workbench-1.6.2/Source/wb_version.py svn-workbench-1.6.6/Source/wb_version.py
--- svn-workbench-1.6.2/Source/wb_version.py	2010-01-04 00:53:16.000000000 +0900
+++ svn-workbench-1.6.6/Source/wb_version.py	2012-03-04 06:15:22.000000000 +0900
@@ -13,5 +13,5 @@
 '''
 major = 1
 minor = 6
-patch = 2
-build = 1283
+patch = 6
+build = 1465
diff -Nru svn-workbench-1.6.2/Source/win32.mak svn-workbench-1.6.6/Source/win32.mak
--- svn-workbench-1.6.2/Source/win32.mak	2009-10-03 17:25:22.000000000 +0900
+++ svn-workbench-1.6.6/Source/win32.mak	2011-11-06 23:19:48.000000000 +0900
@@ -79,10 +79,6 @@
 wb_images.py: make_wb_images.py $(IMAGES)
 	$(PYTHON) -u make_wb_images.py wb_images.py $(IMAGES) 
 
-PYCHECKER_OPTIONS=--no-shadowbuiltin
-
-check: checkstop
-
 #
 #	Make the run script
 #
@@ -103,5 +99,4 @@
 	if exist locale rmdir /s /q locale
 	if exist I18N\pysvn_workbench.current.pot del I18N\pysvn_workbench.current.pot
 
-!include <pychecker.mak>
 !include <meinc_installer.mak>
diff -Nru svn-workbench-1.6.2/debian/changelog svn-workbench-1.6.6/debian/changelog
--- svn-workbench-1.6.2/debian/changelog	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/debian/changelog	2012-07-25 06:31:59.000000000 +0900
@@ -1,3 +1,13 @@
+svn-workbench (1.6.6-1) UNRELEASED; urgency=low
+
+  * QA upload.  
+  * New upstream release
+    - support subversion1.7
+  * debian/watch
+    - exec uupdate automatically
+
+ -- Hideki Yamane <henrich@debian.org>  Wed, 25 Jul 2012 05:16:20 +0900
+
 svn-workbench (1.6.2-2) unstable; urgency=low
 
   * Orphan the package.
diff -Nru svn-workbench-1.6.2/debian/watch svn-workbench-1.6.6/debian/watch
--- svn-workbench-1.6.2/debian/watch	2012-07-25 06:31:59.000000000 +0900
+++ svn-workbench-1.6.6/debian/watch	2012-07-25 06:31:59.000000000 +0900
@@ -1,2 +1,2 @@
 version=3
-http://pysvn.tigris.org/project_downloads.html .*/WorkBench-(.*)\.tar\.gz
+http://pysvn.tigris.org/project_downloads.html .*/WorkBench-(.*)\.tar\.gz debian uupdate


Reply to: