mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-04-10 04:09:58 +00:00
frontends/sftpd: Resolve incompatibilities between SFTP frontend and MDMF changes
This commit is contained in:
parent
b1b77d3b89
commit
a87fc8ffab
@ -30,6 +30,7 @@ from allmydata.util.consumer import download_to_data
|
||||
from allmydata.interfaces import IFileNode, IDirectoryNode, ExistingChildError, \
|
||||
NoSuchChildError, ChildOfWrongTypeError
|
||||
from allmydata.mutable.common import NotWriteableError
|
||||
from allmydata.mutable.publish import MutableFileHandle
|
||||
from allmydata.immutable.upload import FileHandle
|
||||
from allmydata.dirnode import update_metadata
|
||||
from allmydata.util.fileutil import EncryptedTemporaryFile
|
||||
@ -663,22 +664,17 @@ class GeneralSFTPFile(PrefixingLogMixin):
|
||||
else:
|
||||
assert IFileNode.providedBy(filenode), filenode
|
||||
|
||||
if filenode.is_mutable():
|
||||
self.async.addCallback(lambda ign: filenode.download_best_version())
|
||||
def _downloaded(data):
|
||||
self.consumer = OverwriteableFileConsumer(len(data), tempfile_maker)
|
||||
self.consumer.write(data)
|
||||
self.consumer.finish()
|
||||
return None
|
||||
self.async.addCallback(_downloaded)
|
||||
else:
|
||||
download_size = filenode.get_size()
|
||||
assert download_size is not None, "download_size is None"
|
||||
self.async.addCallback(lambda ignored: filenode.get_best_readable_version())
|
||||
|
||||
def _read(version):
|
||||
if noisy: self.log("_read", level=NOISY)
|
||||
download_size = version.get_size()
|
||||
assert download_size is not None
|
||||
|
||||
self.consumer = OverwriteableFileConsumer(download_size, tempfile_maker)
|
||||
def _read(ign):
|
||||
if noisy: self.log("_read immutable", level=NOISY)
|
||||
filenode.read(self.consumer, 0, None)
|
||||
self.async.addCallback(_read)
|
||||
|
||||
version.read(self.consumer, 0, None)
|
||||
self.async.addCallback(_read)
|
||||
|
||||
eventually(self.async.callback, None)
|
||||
|
||||
@ -822,9 +818,7 @@ class GeneralSFTPFile(PrefixingLogMixin):
|
||||
assert parent and childname, (parent, childname, self.metadata)
|
||||
d2.addCallback(lambda ign: parent.set_metadata_for(childname, self.metadata))
|
||||
|
||||
d2.addCallback(lambda ign: self.consumer.get_current_size())
|
||||
d2.addCallback(lambda size: self.consumer.read(0, size))
|
||||
d2.addCallback(lambda new_contents: self.filenode.overwrite(new_contents))
|
||||
d2.addCallback(lambda ign: self.filenode.overwrite(MutableFileHandle(self.consumer.get_file())))
|
||||
else:
|
||||
def _add_file(ign):
|
||||
self.log("_add_file childname=%r" % (childname,), level=OPERATIONAL)
|
||||
|
@ -29,6 +29,7 @@ from allmydata.mutable.common import NotWriteableError
|
||||
|
||||
from allmydata.util.consumer import download_to_data
|
||||
from allmydata.immutable import upload
|
||||
from allmydata.mutable import publish
|
||||
from allmydata.test.no_network import GridTestMixin
|
||||
from allmydata.test.common import ShouldFailMixin
|
||||
from allmydata.test.common_util import ReallyEqualMixin
|
||||
@ -76,7 +77,8 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
|
||||
return d
|
||||
|
||||
def _set_up_tree(self):
|
||||
d = self.client.create_mutable_file("mutable file contents")
|
||||
u = publish.MutableData("mutable file contents")
|
||||
d = self.client.create_mutable_file(u)
|
||||
d.addCallback(lambda node: self.root.set_node(u"mutable", node))
|
||||
def _created_mutable(n):
|
||||
self.mutable = n
|
||||
|
Loading…
x
Reference in New Issue
Block a user