@@ -207,6 +207,14 @@ def _upload_log(log_parser, job_node, storage):
207
207
return _upload_file (storage , job_node , src , 'log.txt.gz' )
208
208
209
209
210
+ def _upload_patch (data , upload_id , filename , storage ):
211
+ with tempfile .TemporaryDirectory () as tmp_dir :
212
+ src = os .path .join (tmp_dir , filename )
213
+ with open (src , 'wt' ) as f :
214
+ f .write (data )
215
+ return _upload_file (storage , upload_id , src , filename )
216
+
217
+
210
218
@app .get ('/' , response_class = HTMLResponse )
211
219
async def read_root ():
212
220
page = '''
@@ -741,6 +749,11 @@ async def patchset(data: PatchSet, request: Request,
741
749
item ['message' ] = 'Node is not a checkout'
742
750
return JSONResponse (content = item , status_code = 400 )
743
751
752
+ # Maybe add field who requested the patchset?
753
+ treeidsrc = node ['data' ]['kernel_revision' ]['url' ] + \
754
+ node ['data' ]['kernel_revision' ]['branch' ] + str (datetime .now ())
755
+ treeid = hashlib .sha256 (treeidsrc .encode ()).hexdigest ()
756
+
744
757
# validate patch URL
745
758
if data .patchurl :
746
759
if isinstance (data .patchurl , list ):
@@ -754,20 +767,22 @@ async def patchset(data: PatchSet, request: Request,
754
767
else :
755
768
return 'Invalid patch URL type' , 400
756
769
elif data .patch :
757
- # We need to implement upload to storage and return URL
758
- item ['message' ] = 'Not implemented yet'
759
- return JSONResponse (content = item , status_code = 501 )
770
+ if isinstance (data .patch , list ):
771
+ data .patchurl = []
772
+ upload_id = {
773
+ 'name' : 'patchset' ,
774
+ 'id' : treeid ,
775
+ }
776
+ for i , patch in enumerate (data .patch ):
777
+ patchurl = _upload_patch (patch , upload_id , f'patch{ i } ' , storage )
778
+ data .patchurl .append (patchurl )
760
779
else :
761
780
item ['message' ] = 'Missing patch URL or patch'
762
781
return JSONResponse (content = item , status_code = 400 )
763
782
764
783
# Now we can submit custom patchset node to the API
765
- # Maybe add field who requested the patchset?
766
784
timeout = 300
767
785
patchset_timeout = datetime .utcnow () + timedelta (minutes = timeout )
768
- treeidsrc = node ['data' ]['kernel_revision' ]['url' ] + \
769
- node ['data' ]['kernel_revision' ]['branch' ] + str (datetime .now ())
770
- treeid = hashlib .sha256 (treeidsrc .encode ()).hexdigest ()
771
786
# copy node to newnode
772
787
newnode = node .copy ()
773
788
# delete some fields, like id, created, updated, timeout
0 commit comments