Unable to push via ftp

David Muir davidkmuir at gmail.com
Tue Dec 1 04:00:18 GMT 2009


Martin Pool wrote:
> 2009/12/1 David Muir <davidkmuir at gmail.com>:
>   
>> I can give it a shot, but I may need a bit of hand-holding :-)
>>
>> Where should I start looking in regards to fixing this bug?
>>     
>
> So the way I think i would tackle it is: look (by setting -Derror or
> in .bzr.log) at the traceback when this error occurs.  This will tell
> you some code that's trying to append to a file on the ftp server.
> The belief is that this code doesn't really need to append to an
> existing file (since current formats don't require that behaviour) and
> it can easily be changed to just write a file.  Post the traceback to
> the bug report so others can help.
>
> You may not actually straightforwardly get a traceback, in which case
> you probably need to insert a
>
>   import pdb;pdb.set_trace()
>
> line to pop the debugger at that point.  You could just put this into
> ftp.py/ append.  Then use 'bt' to get a traceback.
>
> The code that's originally doing the append should be changed to use
> open_write_stream().
>
> hope that helps, don't hesitate to ask,
>
>   

Got the traceback:

Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/bzrlib/commands.py", line 842, 
in exception_to_return_code
    return the_callable(*args, **kwargs)
  File "/usr/lib/python2.6/dist-packages/bzrlib/commands.py", line 1037, 
in run_bzr
    ret = run(*run_argv)
  File "/usr/lib/python2.6/dist-packages/bzrlib/commands.py", line 654, 
in run_argv_aliases
    return self.run(**all_cmd_args)
  File "/usr/lib/python2.6/dist-packages/bzrlib/builtins.py", line 1156, 
in run
    use_existing_dir=use_existing_dir)
  File "/usr/lib/python2.6/dist-packages/bzrlib/push.py", line 128, in 
_show_push_branch
    remember, create_prefix)
  File "/usr/lib/python2.6/dist-packages/bzrlib/bzrdir.py", line 1263, 
in push_branch
    repository_to.fetch(source.repository, revision_id=revision_id)
  File "/usr/lib/python2.6/dist-packages/bzrlib/repository.py", line 
1695, in fetch
    find_ghosts=find_ghosts, fetch_spec=fetch_spec)
  File "/usr/lib/python2.6/dist-packages/bzrlib/decorators.py", line 
192, in write_locked
    result = unbound(self, *args, **kwargs)
  File "/usr/lib/python2.6/dist-packages/bzrlib/repository.py", line 
3413, in fetch
    pb=pb, find_ghosts=find_ghosts)
  File "/usr/lib/python2.6/dist-packages/bzrlib/fetch.py", line 81, in 
__init__
    self.__fetch()
  File "/usr/lib/python2.6/dist-packages/bzrlib/fetch.py", line 107, in 
__fetch
    self._fetch_everything_for_search(search)
  File "/usr/lib/python2.6/dist-packages/bzrlib/fetch.py", line 135, in 
_fetch_everything_for_search
    stream, from_format, [])
  File "/usr/lib/python2.6/dist-packages/bzrlib/repository.py", line 
4234, in insert_stream
    self.target_repo.start_write_group()
  File "/usr/lib/python2.6/dist-packages/bzrlib/repository.py", line 
1770, in start_write_group
    self._start_write_group()
  File "/usr/lib/python2.6/dist-packages/bzrlib/repofmt/pack_repo.py", 
line 2265, in _start_write_group
    self._pack_collection._start_write_group()
  File "/usr/lib/python2.6/dist-packages/bzrlib/repofmt/pack_repo.py", 
line 2021, in _start_write_group
    file_mode=self.repo.bzrdir._get_file_mode())
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/repofmt/groupcompress_repo.py", 
line 154, in __init__
    self._writer.begin()
  File "/usr/lib/python2.6/dist-packages/bzrlib/pack.py", line 129, in begin
    self.write_func(self._serialiser.begin())
  File "/usr/lib/python2.6/dist-packages/bzrlib/pack.py", line 132, in 
write_func
    self._write_func(bytes)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/repofmt/groupcompress_repo.py", 
line 147, in _write_data
    _write(bytes)
  File "/usr/lib/python2.6/dist-packages/bzrlib/transport/__init__.py", 
line 267, in write
    self.transport.append_bytes(self.relpath, bytes)
  File "/usr/lib/python2.6/dist-packages/bzrlib/transport/__init__.py", 
line 1011, in append_bytes
    return self.append_file(relpath, StringIO(bytes), mode=mode)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/transport/ftp/__init__.py", 
line 404, in append_file
    self._try_append(relpath, text, mode)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/transport/ftp/__init__.py", 
line 444, in _try_append
    self._try_append(relpath, text, mode, retries+1)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/transport/ftp/__init__.py", 
line 444, in _try_append
    self._try_append(relpath, text, mode, retries+1)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/transport/ftp/__init__.py", 
line 444, in _try_append
    self._try_append(relpath, text, mode, retries+1)
  File 
"/usr/lib/python2.6/dist-packages/bzrlib/transport/ftp/__init__.py", 
line 440, in _try_append
    "Aborting." % abspath, orig_error=e)


Looking through the code, it looks like the append fallback relies on 
the server returning a permanent error rather than a temporary error. 
The ftp server I'm connecting to is nice enough to give me a temporary 
error, so the fallback is never triggered.

I'm a little confused by terminology... and Python in general...
IIUC, the transport assumes append based file streams (because of 
previous limitations?). So even though the method is called append_file, 
having it put the file instead is ok?

Cheers,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ubuntu.com/archives/bazaar/attachments/20091201/6d14e87c/attachment-0001.htm 


More information about the bazaar mailing list