When I said it works, I lied... But now it works a little bit more

This commit is contained in:
Dominik Moritz Roth 2020-06-18 18:11:59 +02:00
parent c0e3c81231
commit 085e503dec

27
next.py
View File

@ -236,8 +236,13 @@ class TangleFileTreeElement(TangleBlob):
self.inodes[atom.name] = atom self.inodes[atom.name] = atom
def _applyAtom(self, atom: Atom) -> None: def _applyAtom(self, atom: Atom) -> None:
## TODO: if atom.name in self.inodes:
pass self.inodes[atom.name].applyAtom(atom)
else:
cont = atom.cont
type = ["dir","file"][cont[b't']]
inode = Inode(atom.name, self.iotaApi, self, type)
self.inodes[atom.name] = inode
def _newAtom(self, atom: Atom) -> None: def _newAtom(self, atom: Atom) -> None:
self.append(atom.dump()) self.append(atom.dump())
@ -264,11 +269,8 @@ class TangleFileTreeElement(TangleBlob):
self._requireFetched() self._requireFetched()
if name in self.getNameList(): if name in self.getNameList():
return False return False
atom = Atom() file = Inode(name, self.iotaApi, self, "file")
atom.type="file" atom = file.change(size=0, milestoneIndex=0, hash=b'NULL')
atom.name = name
atom.token = self.genToken()
atom.size = 0
self._newAtom(atom) self._newAtom(atom)
self._applyAtom(atom) self._applyAtom(atom)
return True return True
@ -340,11 +342,12 @@ class Inode():
def change(self, size: int=None, hash: int=None, milestoneIndex: int=None) -> Atom: def change(self, size: int=None, hash: int=None, milestoneIndex: int=None) -> Atom:
delta = {} delta = {}
delta[b't'] = (self.type=="file")
if size!=None: if size!=None:
self.size = size self.size = size
delta[b's'] = size delta[b's'] = size
if size!=None: if hash!=None:
self.size = hash self.hash = hash
delta[b'h'] = hash delta[b'h'] = hash
if milestoneIndex!=None: if milestoneIndex!=None:
self.milestoneIndex = milestoneIndex self.milestoneIndex = milestoneIndex
@ -359,6 +362,8 @@ class Inode():
if self.name in stones: if self.name in stones:
self.applyAtom(Atom(False, stones[self.name], self.name)) self.applyAtom(Atom(False, stones[self.name], self.name))
else: else:
if (self.type=="file") != atom.cont[b't']:
raise Exception("I am a "+self.type+"; this atom is for the other thing")
delta = atom.cont delta = atom.cont
if b's' in delta: if b's' in delta:
self.size = delta[b's'] self.size = delta[b's']
@ -376,9 +381,9 @@ class Inode():
return None return None
if not self.ref: if not self.ref:
if self.type=="dir": if self.type=="dir":
self.elem = TangleFileTreeElement(self.name, self.milestoneIndex, self.parent, self.iotaApi) self.ref = TangleFileTreeElement(self.name, self.milestoneIndex, self.parent, self.iotaApi)
elif self.type=="file": elif self.type=="file":
self.ref = TangleFile(self.name, self, self.api) self.ref = TangleFile(self.name, self, self.iotaApi)
else: else:
raise Exception("Cannot get reference of an inode of type "+self.type) raise Exception("Cannot get reference of an inode of type "+self.type)
return self.ref return self.ref