gitfs
TRANSCRIPT
![Page 1: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/1.jpg)
gitfs@vtemian
![Page 2: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/2.jpg)
gitfs - Pytim #7
$whoami
![Page 3: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/3.jpg)
gitfs - Pytim #7
![Page 4: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/4.jpg)
gitfs - Pytim #7
the problem
![Page 5: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/5.jpg)
CHAOS!
gitfs - Pytim #7
![Page 6: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/6.jpg)
gitfs - Pytim #7
![Page 7: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/7.jpg)
gitfs - Pytim #7
introducing gitfs
![Page 8: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/8.jpg)
gitfs - Pytim #7
gitfswhat is it?
![Page 9: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/9.jpg)
gitfs - Pytim #7
demo
![Page 10: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/10.jpg)
gitfs - Pytim #7
easy!as 1,2,3
![Page 11: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/11.jpg)
gitfs - Pytim #7
![Page 12: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/12.jpg)
gitfs - Pytim #7
open-source
![Page 13: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/13.jpg)
gitfs - Pytim #7
how was it made?
![Page 14: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/14.jpg)
gitfs - Pytim #7
research
![Page 15: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/15.jpg)
gitfs - Pytim #7
for git
![Page 16: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/16.jpg)
gitfs - Pytim #7
git=pygit2
![Page 17: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/17.jpg)
gitfs - Pytim #7
from pygit2 import clone_repository, Keypair
![Page 18: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/18.jpg)
gitfs - Pytim #7
from pygit2 import clone_repository, Keypair
credentials = Keypair("git", "/home/wok/.ssh/ unsafe_key.pub","/home/wok/.ssh/unsafe_key", "")
![Page 19: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/19.jpg)
gitfs - Pytim #7
from pygit2 import clone_repository, Keypair
credentials = Keypair("git", "/home/wok/.ssh/ unsafe_key.pub","/home/wok/.ssh/unsafe_key", "")
repository = clone_repository("[email protected]:vtemian/gitfs-demo","/home/wok/gitfs-demo", credentials=credentials)
![Page 20: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/20.jpg)
gitfs - Pytim #7
from pygit2 import clone_repository, Keypair
credentials = Keypair("git", "/home/wok/.ssh/ unsafe_key.pub","/home/wok/.ssh/unsafe_key", "")
repository = clone_repository("[email protected]:vtemian/gitfs-demo","/home/wok/gitfs-demo", credentials=credentials)
remote = [remote for remote in repo.remotes if remote.name == "origin"] remote[0].credentials = credentials
![Page 21: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/21.jpg)
gitfs - Pytim #7
from pygit2 import clone_repository, Keypair
credentials = Keypair("git", "/home/wok/.ssh/ unsafe_key.pub","/home/wok/.ssh/unsafe_key", "")
repository = clone_repository("[email protected]:vtemian/gitfs-demo","/home/wok/gitfs-demo", credentials=credentials)
remote = [remote for remote in repo.remotes if remote.name == "origin"] remote[0].credentials = credentials remote[0].push("refs/heads/master")
![Page 22: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/22.jpg)
gitfs - Pytim #7
for the file system
![Page 23: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/23.jpg)
gitfs - Pytim #7
file system=fusepy
![Page 24: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/24.jpg)
gitfs - Pytim #7
class Memory(Operations):
![Page 25: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/25.jpg)
gitfs - Pytim #7
class Memory(Operations): def open(self, path, flags): self.fd += 1 return self.fd
![Page 26: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/26.jpg)
gitfs - Pytim #7
class Memory(Operations): def open(self, path, flags): self.fd += 1 return self.fd
def read(self, path, size, offset, fh): return self.data[path][offset:offset + size]
![Page 27: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/27.jpg)
gitfs - Pytim #7
class Memory(Operations): def open(self, path, flags): self.fd += 1 return self.fd
def read(self, path, size, offset, fh): return self.data[path][offset:offset + size]
def rename(self, old, new): self.files[new] = self.files.pop(old)
![Page 28: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/28.jpg)
gitfs - Pytim #7
class Memory(Operations): def open(self, path, flags): self.fd += 1 return self.fd
def read(self, path, size, offset, fh): return self.data[path][offset:offset + size]
def rename(self, old, new): self.files[new] = self.files.pop(old)
def rmdir(self, path): self.files.pop(path) self.files['/']['st_nlink'] -= 1
![Page 29: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/29.jpg)
gitfs - Pytim #7
class Memory(Operations): def open(self, path, flags): self.fd += 1 return self.fd
def read(self, path, size, offset, fh): return self.data[path][offset:offset + size]
def rename(self, old, new): self.files[new] = self.files.pop(old)
def rmdir(self, path): self.files.pop(path) self.files['/']['st_nlink'] -= 1
def write(self, path, data, offset, fh): self.data[path] = self.data[path][:offset] +data self.files[path]['st_size'] = len(self.data[path]) return len(data)
![Page 30: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/30.jpg)
gitfs - Pytim #7
first iteration
![Page 31: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/31.jpg)
gitfs - Pytim #7
very dirty
def rename(self, old, new): if "history" in old or new: # raise EROFS elif old == "/" or new == "/": # raise EROFS else: # do the actual rename
![Page 32: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/32.jpg)
gitfs - Pytim #7
second iteration
![Page 33: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/33.jpg)
gitfs - Pytim #7
read()
Router
CurrentView HistoryView CommitView IndexView
![Page 34: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/34.jpg)
gitfs - Pytim #7
read('/history/2014-10-18/14-01-04-fg34asc4/Readme.md')
CommitView
![Page 35: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/35.jpg)
gitfs - Pytim #7
upstream synchronization
![Page 36: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/36.jpg)
gitfs - Pytim #7
solve conflicts
![Page 37: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/37.jpg)
gitfs - Pytim #7
solve conflicts
1 2 3
7 8
4 5 6
remote
local
![Page 38: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/38.jpg)
gitfs - Pytim #7
solve conflicts1 2 3 4 5 6
merging_remote
1 2 3 7 8merging_local
![Page 39: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/39.jpg)
gitfs - Pytim #7
1 2 3 4 5 7'6 8'local
solve conflicts
![Page 40: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/40.jpg)
gitfs - Pytim #7
third iteration
![Page 41: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/41.jpg)
gitfs - Pytim #7
cache
![Page 42: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/42.jpg)
gitfs - Pytim #7
upstream synchronization
![Page 43: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/43.jpg)
gitfs - Pytim #7
Fuse threads
![Page 44: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/44.jpg)
gitfs - Pytim #7
commits
Fuse threads
![Page 45: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/45.jpg)
gitfs - Pytim #7
Commit queue
commits
Fuse threads
![Page 46: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/46.jpg)
gitfs - Pytim #7
Sync workerCommit queue
commits
Fuse threads
![Page 47: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/47.jpg)
gitfs - Pytim #7
want to syncdon't open for write
Commit queueSync worker
commits
Fuse threads
![Page 48: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/48.jpg)
gitfs - Pytim #7
commit
want to syncdon't open for write
Commit queueSync worker
commits
Fuse threads
![Page 49: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/49.jpg)
gitfs - Pytim #7
commit
sync done
want to syncdon't open for write
Commit queue Fetch workerSync worker
fetch
fetch
fetch
commits
Fuse threads
![Page 50: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/50.jpg)
gitfs - Pytim #7
pytest
![Page 51: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/51.jpg)
gitfs - Pytim #7
$ sudo add-apt-repository ppa:presslabs/gitfs $ sudo apt-get update $ sudo apt-get install gitfs
![Page 52: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/52.jpg)
gitfs - Pytim #7
commits forks
stars releases
868 27
606 11
![Page 53: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/53.jpg)
gitfs - Pytim #7
github.com/PressLabs/gitfs
![Page 54: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/54.jpg)
gitfs - Pytim #7
Q/A?
![Page 55: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/55.jpg)
gitfs - Pytim #7
thank you
![Page 56: gitfs](https://reader034.vdocument.in/reader034/viewer/2022042817/55a796b21a28ab751f8b47f2/html5/thumbnails/56.jpg)
gitfs - Pytim #7