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

Re: pysvn: RC fix #678559 as new upstream release



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 "Ã?llapot"
+
+#: 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 "�tnevezé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 "�j dosszié"
+
+#: wb_dialogs.py:480
+#: wb_dialogs.py:485
+msgid "New File"
+msgstr "�j fájl"
+
+#: wb_dialogs.py:489
+msgid "New Filename:"
+msgstr "�j fájlnév:"
+
+#: wb_dialogs.py:504
+msgid "Template:"
+msgstr "Minta:"
+
+#: wb_dialogs.py:554
+msgid "Empty directory"
+msgstr "�res 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Å?rzött leszármazottak"
+
+#: wb_dialogs.py:559
+msgid "All descendants (Full recursion)"
+msgstr "�sszes 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 "�rjon 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 "�sszehasonlí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 "�sszes 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 "�sszes 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Å?zÅ? 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 "�sszehasonlí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 "�sszehasonlí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 "�sszehasonlí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 "�sszehasonlí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 "�sszehasonlí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 "�sszehasonlító konfliktus: régi és saját..."
+
+#: wb_frame.py:91
+#: wb_subversion_list_handler.py:54
+msgid "Diff Conflict Mine vs. New..."
+msgstr "�sszehasonlító konfliktus: saját és új..."
+
+#: wb_frame.py:92
+#: wb_subversion_list_handler.py:55
+msgid "Diff Conflict Old vs. New..."
+msgstr "�sszehasonlí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Å?zmé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Å?rzés"
+
+#: wb_frame.py:105
+#: wb_subversion_tree_handler.py:186
+msgid "Checkout to..."
+msgstr "EllenÅ?rzés..."
+
+#: wb_frame.py:107
+#: wb_subversion_list_handler.py:71
+#: wb_subversion_tree_handler.py:191
+msgid "Checkin..."
+msgstr "EllenÅ?rzé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 "�j 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 "�tnevezé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Å?rzé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Å?rzött fájlok mutatása"
+
+#: wb_frame.py:134
+msgid "Show Controlled files"
+msgstr "EllenÅ?rzött fájlok mutatása"
+
+#: wb_frame.py:135
+msgid "Show &Uncontrolled files"
+msgstr "EllenÅ?rizetlen fájlok mutatása"
+
+#: wb_frame.py:135
+msgid "Show Uncontrolled files"
+msgstr "EllenÅ?rizetlen 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 "Ã?rvé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 "�sszehasonlí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 "�sszehasonlí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Å?zmények"
+
+#: wb_preferences_dialog.py:711
+#: wb_subversion_history.py:194
+msgid "Show all entries"
+msgstr "�ssze 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Å?tartam 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Å?zmé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Å?leges"
+
+#: 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 "�nké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 "�j 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 "�j 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 " �j 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 ""
+"Ã?tvonal %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 ""
+"Ã?tvonal %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 ""
+"Ã?tvonal %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 "�j 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 ""
+"Ã?tvonal %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 ""
+"Ã?tvonal %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 ""
+"Ã?tvonal %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 ""
+"Ã?tvonal %(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Å?rzés itt: %s"
+
+#: wb_subversion_checkin.py:54
+msgid "Select All"
+msgstr "�sszes kiválasztása"
+
+#: wb_subversion_checkin.py:54
+msgid "Select ALl"
+msgstr "�sszes 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Å?rzésbÅ?l"
+
+#: 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Å?rzé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Å?zmé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Å?rzésbe"
+
+#: wb_subversion_checkin.py:136
+msgid " Check In "
+msgstr "r"
+
+#: wb_subversion_checkin.py:242
+#, python-format
+msgid "Check in %s..."
+msgstr "EllenÅ?rzés %s..."
+
+#: wb_subversion_checkin.py:243
+#, python-format
+msgid "Sent %(count)d of %(total)d"
+msgstr "Küldés %(count)d, ennyibÅ?l %(total)d"
+
+#: wb_subversion_checkin.py:265
+#, python-format
+msgid "Checkin created revision %d"
+msgstr "EllenÅ?rzés készített revízió %d"
+
+#: wb_subversion_checkin.py:267
+msgid "No changes to checkin "
+msgstr "Nincsenek cserék az elleÅ?rzé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Å?rzé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 "Ã?tvonal"
+
+#: 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Å?zmények %s"
+
+#: wb_subversion_history.py:505
+msgid "Label"
+msgstr "Címke"
+
+#: wb_subversion_history.py:506
+msgid "Message"
+msgstr "Ã?zenet"
+
+#: 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 "�sszehasonlí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Å?zmé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Å?zve. 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 "Ã?tvonal"
+
+#: 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Å?l az URL-rÅ?l:"
+
+#: wb_subversion_info_dialog.py:86
+#: wb_subversion_info_dialog.py:155
+msgid "Copied From Revision:"
+msgstr "Másolva ebbÅ?l 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 "Ã?llapot"
+
+#: 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Å?rzé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 "�sszehasonlítás BASE %s..."
+
+#: wb_subversion_list_handler_common.py:743
+#: wb_subversion_tree_handler.py:421
+#, python-format
+msgid "Diff HEAD %s..."
+msgstr "�sszehasonlí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 "�sszehasonlítás branch eredeti BASE %s..."
+
+#: wb_subversion_list_handler_common.py:838
+#, python-format
+msgid "Diff branch origin HEAD %s..."
+msgstr "�sszehasonlí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Å?zmé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 "�tnevezé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 "�rvényesség kezdete:"
+
+#: wb_subversion_project_info.py:246
+msgid "Valid Until"
+msgstr "�rvé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 "�sszehasonlí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 "�sszehasonlí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Å?l"
+
+#: 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Å?rzés %s..."
+
+#: wb_subversion_tree_handler.py:286
+msgid "Checkout to revision"
+msgstr "Revízió ellenÅ?rzé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Å?rzé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 "�j 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Å?rzé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: