@@ -174,6 +174,14 @@ def _upload_log(log_parser, job_node, storage):
174
174
return _upload_file (storage , job_node , src , 'log.txt.gz' )
175
175
176
176
177
+ def _upload_patch (data , upload_id , filename , storage ):
178
+ with tempfile .TemporaryDirectory () as tmp_dir :
179
+ src = os .path .join (tmp_dir , filename )
180
+ with open (src , 'wt' ) as f :
181
+ f .write (data )
182
+ return _upload_file (storage , upload_id , src , filename )
183
+
184
+
177
185
@app .get ('/' )
178
186
async def read_root ():
179
187
page = '''
@@ -675,6 +683,11 @@ async def patchset(data: PatchSet, request: Request,
675
683
item ['message' ] = 'Node is not a checkout'
676
684
return JSONResponse (content = item , status_code = 400 )
677
685
686
+ # Maybe add field who requested the patchset?
687
+ treeidsrc = node ['data' ]['kernel_revision' ]['url' ] + \
688
+ node ['data' ]['kernel_revision' ]['branch' ] + str (datetime .now ())
689
+ treeid = hashlib .sha256 (treeidsrc .encode ()).hexdigest ()
690
+
678
691
# validate patch URL
679
692
if data .patchurl :
680
693
if isinstance (data .patchurl , list ):
@@ -688,20 +701,22 @@ async def patchset(data: PatchSet, request: Request,
688
701
else :
689
702
return 'Invalid patch URL type' , 400
690
703
elif data .patch :
691
- # We need to implement upload to storage and return URL
692
- item ['message' ] = 'Not implemented yet'
693
- return JSONResponse (content = item , status_code = 501 )
704
+ if isinstance (data .patch , list ):
705
+ data .patchurl = []
706
+ upload_id = {
707
+ 'name' = 'patchset' ,
708
+ 'id' = treeid ,
709
+ }
710
+ for i , patch in enumerate (data .patch ):
711
+ patchurl = _upload_patch (patch , upload_id , f'patch{ i } ' , storage )
712
+ data .patchurl .append (patchurl )
694
713
else :
695
714
item ['message' ] = 'Missing patch URL or patch'
696
715
return JSONResponse (content = item , status_code = 400 )
697
716
698
717
# Now we can submit custom patchset node to the API
699
- # Maybe add field who requested the patchset?
700
718
timeout = 300
701
719
patchset_timeout = datetime .utcnow () + timedelta (minutes = timeout )
702
- treeidsrc = node ['data' ]['kernel_revision' ]['url' ] + \
703
- node ['data' ]['kernel_revision' ]['branch' ] + str (datetime .now ())
704
- treeid = hashlib .sha256 (treeidsrc .encode ()).hexdigest ()
705
720
# copy node to newnode
706
721
newnode = node .copy ()
707
722
# delete some fields, like id, created, updated, timeout
0 commit comments