@@ -144,19 +144,26 @@ class CryptRepo:
144144 plugin .globalinit (clearname .encode ('utf-8' ), url .encode ('utf-8' ))
145145 if init :
146146 plugin .initbare (clearname .encode ('utf-8' ))
147- template = plugin .mktemplate (
147+ plugin .mktemplate (
148148 init .name .encode ('utf-8' ) if init .name else None ,
149149 init .email .encode ('utf-8' ) if init .email else None ,
150150 init .date .encode ('utf-8' ) if init .date else None ,
151151 '\n \n ' .join (init .m ).encode ('utf-8' ) if init .m else None )
152+ plugin .metainit ()
153+ # params: init.keys, 'refs/heads/master'
154+ output = ctypes .create_string_buffer (41 )
155+ poutput = ctypes .c_char_p (ctypes .addressof (output ))
156+ plugin .writemeta (poutput )
152157 self .repo = pygit2 .Repository ('.' )
153- self .meta = MetaData (self .repo ).init (
154- init .keys , template , 'refs/heads/master' )
158+ blubs = self .repo .get (output .value .decode ('utf-8' )).id
159+ self .repo .create_reference (
160+ plugin .getprefix ().decode ('utf-8' ) + '1/_' , blubs , force = True )
161+ self .meta = MetaData (self .repo )
155162 self .trust (force = True , sign = True )
156163 else :
157164 self .repo = pygit2 .Repository ('.' )
158165 plugin .fetchpattern ('_' .encode ('utf-8' )[0 ])
159- self .meta = MetaData (self .repo ). read ()
166+ self .meta = MetaData (self .repo )
160167 if forcetrust :
161168 self .trust (force = forcetrust )
162169
@@ -257,8 +264,8 @@ class CryptRepo:
257264 cryptmap , cwd = self .repo .path ),
258265 decryptobject )
259266 for r in refs :
260- self .repo .create_reference (
261- r [1 ], decryptdata ( r [ 2 ].tree ['0' ].read_raw ())[0 :20 ].hex (), force = True )
267+ self .repo .create_reference (r [ 1 ], decryptdata (
268+ r [2 ].tree ['0' ].read_raw ())[0 :20 ].hex (), force = True )
262269 expected = [r [1 ] for r in refs ]
263270 result = [['HEAD' , f'@{ self .meta .defaultbranch } ' ]]
264271 for r in self .repo .references :
@@ -434,42 +441,14 @@ class MetaData:
434441 self .template = None
435442 self .defaultbranch = None
436443 self .gpgkeys = []
444+ self .read ()
437445
438446 def _gpg (self , args , inp ):
439447 'run gpg'
440448 return subprocess .check_output (
441449 [f'gpg@incrypt::{ plugin .geturl ().decode ("utf-8" )} ' ] + args ,
442450 executable = 'gpg' , input = inp )
443451
444- def init (self , gpgkeys , template , defaultbranch ):
445- 'initialize the metadata'
446- self .files = {}
447- plugin .metainit ()
448- output = ctypes .create_string_buffer (41 )
449- poutput = ctypes .c_char_p (ctypes .addressof (output ))
450- plugin .writemeta (poutput )
451- blubs = self .repo .get (output .value .decode ('utf-8' )).id
452- self .files ['ver' ] = self .repo .create_blob (MetaData .VER )
453- self .key = ctypes .string_at (plugin .getcryptkey (), 48 ) # os.urandom(48)
454- keyhashbase = MetaData .KEYVER + b'\x00 ' + self .key
455- self .keyhash = sha1hex (keyhashbase )
456- cryptedkey = self ._gpg (
457- ['-q' , '-e' ] + ['-r' + k for k in gpgkeys ], keyhashbase )
458- self .files ['key' ] = self .repo .create_blob (cryptedkey )
459- self .files ['sig' ] = self .repo .TreeBuilder ().write ()
460- self .template = template
461- self .files ['msg' ] = self .repo .create_blob (encryptdata (
462- sha1 (template ) + template ))
463- self .defaultbranch = defaultbranch
464- encodedbranch = defaultbranch .encode ('utf-8' )
465- self .files ['def' ] = self .repo .create_blob (encryptdata (
466- sha1 (encodedbranch ) + encodedbranch ))
467- # self.write()
468- commit = self .secretcommit (blubs , [])
469- self .repo .create_reference (
470- plugin .getprefix ().decode ('utf-8' ) + '1/_' , commit , force = True )
471- return self
472-
473452 def addkey (self , gpgkeys ):
474453 'add gpg key'
475454 self .gpgkeys += gpgkeys
0 commit comments