#10416 closed defect (fixed)
Repository Resync broken with Subversion 1.7.0
Reported by: | anonymous | Owned by: | Remy Blank |
---|---|---|---|
Priority: | high | Milestone: | not applicable |
Component: | admin/console | Version: | 0.12.2 |
Severity: | critical | Keywords: | svn17 |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
trac-admin repository resync fails with error message after upgrade to Subversion 1.7.0:
TypeError: must be string, not instance
System: Windows 7 (x64); Trac 0.12.2; Python 2.7.2.5 (32-bit); SVN 1.7.0 (32-bit, alagazam.net).
System confirmed working when downgraded to SVN 1.6.15. Using single repository connected with new provider.
Attachments (0)
Change History (21)
comment:1 by , 13 years ago
Owner: | set to |
---|---|
Priority: | normal → high |
comment:2 by , 13 years ago
Keywords: | needinfo added |
---|
I'll definitely need the traceback, because everything works fine here on OS X with 1.7.0. The issue may be Windows-specific.
comment:3 by , 13 years ago
Keywords: | needinfo removed |
---|
I can reproduce the issue with 0.12.3dev r10843, Python 2.6 and win32svn svn-win32-1.7.0_py26.zip on Windows XP sp3 (32-bit, Japanese Edition).
Complete traceback;
Trac [C:\usr\var\trac\0.12.2dev]> repository resync "" リポジトリ (default) の履歴を再同期します… 18:14:45 Trac[cache] INFO: Cleaning cache 18:14:45 Trac[cache] INFO: Resetting "repository_dir": svn:456a77e7-5939-0410-b211-84f85430c667:C:/usr/var/svn/shibuya-trac 18:14:45 Trac[cache] DEBUG: cache metadata undefined (youngest_rev=0) 18:14:45 Trac[cache] INFO: repos rev [807] != cached rev [None] 18:14:45 Trac[cache] INFO: Trying to sync revision [1] TypeError: svn_time_from_cstring() argument 2 must be string, not instance 18:14:45 Trac[console] ERROR: Exception in trac-admin command: Traceback (most recent call last): File "trac\admin\console.py", line 107, in onecmd rv = cmd.Cmd.onecmd(self, line) or 0 File "C:\usr\apps\python26\lib\cmd.py", line 218, in onecmd return self.default(line) File "trac\admin\console.py", line 270, in default return cmd_mgr.execute_command(*args) File "C:\usr\src\trac\0.12-stable\trac\admin\api.py", line 123, in execute_command return f(*fargs) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\admin.py", line 153, in _do_resync self._sync(reponame, rev, clean=True) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\admin.py", line 139, in _sync repos.sync(self._sync_feedback, clean=clean) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\cache.py", line 242, in sync @self.env.with_transaction() File "C:\usr\src\trac\0.12-stable\trac\db\api.py", line 77, in transaction_wrapper fn(ldb) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\cache.py", line 249, in do_transaction cset = self.repos.get_changeset(next_youngest) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\svn_fs.py", line 442, in get_changeset return SubversionChangeset(self, rev, self.scope, self.pool) File "C:\usr\src\trac\0.12-stable\trac\versioncontrol\svn_fs.py", line 865, in __init__ ts = core.svn_time_from_cstring(_date, self.pool()) File "C:\usr\apps\python26\lib\site-packages\libsvn\core.py", line 405, in svn_time_from_cstring return _core.svn_time_from_cstring(*args) TypeError: svn_time_from_cstring() argument 2 must be string, not instance
comment:4 by , 13 years ago
Can you try printing the arguments to svn_time_from_cstring()
? I assume argument 2 is actually the first argument, otherwise it doesn't make sense. So your date value is not a string. That value is retrieved with fs.revision_prop(core.SVN_PROP_REVISION_DATE)
.
comment:5 by , 13 years ago
Ok. I just use pdb. It seems the first argument is a string.
> c:\usr\apps\python26\lib\site-packages\libsvn\core.py(405)svn_time_from_cstring() -> return _core.svn_time_from_cstring(*args) (Pdb) p args ('2007-10-14T13:41:57.252315Z', <libsvn.core.apr_pool_t; proxy of <Swig Object of type 'apr_pool_t *' at 0x0128CC68> >) (Pdb) type(args[0]) <type 'str'> (Pdb) isinstance(args[0], basestring) True (Pdb) up > c:\usr\src\trac\0.12-stable\trac\versioncontrol\svn_fs.py(865)__init__() -> ts = core.svn_time_from_cstring(_date, self.pool()) (Pdb) l 860 # we _hope_ it's UTF-8, but can't be 100% sure (#4321) 861 message = message and to_unicode(message, 'utf-8') 862 author = author and to_unicode(author, 'utf-8') 863 _date = self._get_prop(core.SVN_PROP_REVISION_DATE) 864 if _date: 865 -> ts = core.svn_time_from_cstring(_date, self.pool()) 866 date = from_utimestamp(ts) 867 else: 868 date = None 869 Changeset.__init__(self, repos, rev, message, author, date) 870 (Pdb) p self._get_prop(core.SVN_PROP_REVISION_DATE) '2007-10-14T13:41:57.252315Z' (Pdb) p _date '2007-10-14T13:41:57.252315Z'
comment:6 by , 13 years ago
Mmh, bad. Can you try calling svn.time_from_cstring()
interactively? Does it raise an exception for all strings that you pass?
comment:7 by , 13 years ago
Does it raise an exception for all strings that you pass?
Yes. I always get a exception with any arguments.
(Pdb) down > c:\usr\apps\python26\lib\site-packages\libsvn\core.py(405)svn_time_from_cstring() -> return _core.svn_time_from_cstring(*args) (Pdb) p _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', None) *** TypeError: TypeError('svn_time_from_cstring() argument 2 must be string, not None',) (Pdb) p _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', '') *** SubversionException: SubversionException(None, 125003) (Pdb) p _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', u'') *** SubversionException: SubversionException(None, 125003) (Pdb) p _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', 'blah') *** SubversionException: SubversionException(None, 125003) (Pdb) p _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', 1) *** TypeError: TypeError('svn_time_from_cstring() argument 2 must be string, not int',) (Pdb) p _core.svn_time_from_cstring(None, None) *** TypeError: TypeError('svn_time_from_cstring() argument 2 must be string, not None',) (Pdb) p _core.svn_time_from_cstring(None, '2007-10-14T13:41:57.252315Z') ===> (python.exe crashed)
comment:8 by , 13 years ago
Weird. Here's what I get on OS X with 1.7.0 on Python 2.6:
>>> from libsvn import _core >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', None) 1192369317252315L >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', '') TypeError: argument number 2: a 'apr_pool_t *' is expected, 'str()' is received >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', 1) TypeError: argument number 2: a 'apr_pool_t *' is expected, 'int(1)' is received >>> _core.svn_time_from_cstring(None, None) TypeError: svn_time_from_cstring() argument 1 must be string, not None >>> _core.svn_time_from_cstring(None, '2007-10-14T13:41:57.252315Z') TypeError: svn_time_from_cstring() argument 1 must be string, not None
So the function signature is different between *nix and Windows? This could also be a SWIG issue. Do you happen to run on a 64-bit system? Mine is 32-bit.
comment:9 by , 13 years ago
Do you happen to run on a 64-bit system? Mine is 32-bit.
mine is also 32-bit.
follow-up: 11 comment:10 by , 13 years ago
I can reproduce the issue on Windows 7 with the 1.7.0 bindings from alagazam.net. The bindings for the same version on Linux and OS X work correctly.
The function signature is actually completely screwed up. I couldn't find a way to call the function that returns a useful result.
At this point, I think it's an issue with the Windows bindings, and I have reported it to the packager. He does mention on the web site that the bindings aren't tested, but hopefully he'll take a look. A comparison with bindings compiled by someone else could have been interesting, but AFAICT, none of the other binary packages provide Python bindings.
comment:11 by , 13 years ago
Replying to rblank:
A comparison with bindings compiled by someone else could have been interesting, but AFAICT, none of the other binary packages provide Python bindings.
I tried CollabNet Subversion Edge 2.1.0 (for Windows 32 bit) which includes Python bindings. The svn_time_from_cstring
method works fine with CollabNet Subversion Edge on Windows XP sp3.
It seems that the bindings from alagazam.net only has the issue.
C:\csvn>svn --version svn, version 1.7.0 (r1176462) compiled Oct 5 2011, 02:14:21 Copyright (C) 2011 The Apache Software Foundation. .... C:\csvn>set PYTHONPATH=C:\csvn\lib\svn-python C:\csvn>python Python 2.7.1 (r271:86832, Oct 5 2011, 02:00:56) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from libsvn import _core >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', None) 1192369317252315L >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', '') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument number 2: a 'apr_pool_t *' is expected, 'str()' is received >>> _core.svn_time_from_cstring('2007-10-14T13:41:57.252315Z', 1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument number 2: a 'apr_pool_t *' is expected, 'int(1)' is received >>> _core.svn_time_from_cstring(None, None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be string, not None
comment:12 by , 13 years ago
Good to know, thanks. I have added a warning to the Windows section of TracSubversion.
comment:13 by , 13 years ago
Keywords: | svn17 added |
---|
comment:14 by , 13 years ago
Milestone: | 0.12.3 → not applicable |
---|
The bindings found in the CollabNet Server 2.1 are working fine (see TracSubversion#forPython2.7), so there's nothing critical here.
We can keep the ticket as a reminder to update the TracSubversion page once the Alagazam bindings get fixed.
comment:15 by , 13 years ago
Trying to contribute:
- CollabNet Server compiles APR producing the function _apr_time_ansi_put@12. It's used in that way in bindings, svn and apache server. They use Visual Studio 2010.
- Alagazam compiles APR producing the function _apr_time_ansi_put@8 (for bindings and svn server/binaries). He is using Visual C++ 6.0.
- Apache compiles and distributes HTTP Server for windows (with APR) compiling in the same way that Alagazam (@8 and using VC 6).
- Apache Lounge compiles and distributes HTTP Server for windows in the same way that CollabNet (@12 and using VC 8).
There is a directive (_USE_32BIT_TIME_T) to change _apr_time_ansi_put@8 to _apr_time_ansi_put@12. Maybe, with SV 1.7.0 new similar problems have raised with other functions. I think this is the principal problem (mixing Apache APR, SVN APR and Python bindings compiled in different ways because of such kind of directives).
CollabNet python bindings works fine with CollabNet SVN server (Edge named) plus Apache Lounge Server (and Trac with mod_wsgi). CollabNet python bindings doesn't work with Alazagam SVN Server and Apache server.
Note: APR is Apache Portable Runtime, used by Apache HTPP server, SVN server/binaries and SWIG (used in python bindings).
follow-ups: 17 19 comment:16 by , 13 years ago
Problem seems to be resolved on original reporters system for Alagazam SVN 1.7.1 binaries. Anyone confirm with more sophisticated tests than "try it and see"?
follow-up: 18 comment:17 by , 13 years ago
Replying to anonymous:
Problem seems to be resolved on original reporters system for Alagazam SVN 1.7.1 binaries. Anyone confirm with more sophisticated tests than "try it and see"?
Although it turns out setuptools is broken: "unrecognized .svn/entries format in" error as was the case with previous svn upgrades.
comment:18 by , 13 years ago
Replying to anonymous:
Replying to anonymous: … Although it turns out setuptools is broken: "unrecognized .svn/entries format in" error as was the case with previous svn upgrades.
Let's hope that the Distribute people are more reactive on this issue… See https://bitbucket.org/tarek/distribute/issue/252/subversion-17-introduces-new-storage.
comment:19 by , 13 years ago
Replying to anonymous:
Problem seems to be resolved on original reporters system for Alagazam SVN 1.7.1 binaries. Anyone confirm with more sophisticated tests than "try it and see"?
I have used the Alagazam 1.7.1 bindings for Python 2.5 and they are working fine here.
comment:20 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Alagazam's 1.7.1 bindings indeed work fine, and the 1.7.0 bindings should be fixed as well. Thanks Alagazam!
comment:21 by , 13 years ago
Actually the 1.7.0 bindings was not fixed…they was withdrawn from download.
There was some other quite serious bugs in 1.7.0 so everyone using that version is highly recomended to upgrade to a newer version.
See, that's exactly what I meant in #10414. Oh well…
Could you please check the log and see if you can find the complete traceback for the error? This would be extremely helpful.