@@ -113,30 +113,40 @@ def _run_bot_task(func, *, log_level, existing_feedstock_node_attrs, **kwargs):
113
113
print (dumps (ret ))
114
114
115
115
116
- def _execute_git_cmds_and_report (* , cmds , cwd , msg ):
116
+ def _execute_git_cmds_and_report (* , cmds , cwd , msg , ignore_stderr = False ):
117
117
logger = logging .getLogger ("conda_forge_feedstock_ops.container" )
118
118
119
119
try :
120
120
_output = ""
121
+ _output_stderr = ""
121
122
for cmd in cmds :
122
123
gitret = subprocess .run (
123
124
cmd ,
124
125
cwd = cwd ,
125
126
stdout = subprocess .PIPE ,
126
- stderr = subprocess .STDOUT ,
127
+ stderr = subprocess .PIPE if ignore_stderr else subprocess . STDOUT ,
127
128
text = True ,
128
129
)
129
130
logger .debug ("git command %r output: %s" , cmd , gitret .stdout )
130
131
_output += gitret .stdout
132
+ if ignore_stderr :
133
+ _output_stderr += gitret .stderr
131
134
gitret .check_returncode ()
132
135
except Exception as e :
133
- logger .error ("%s\n output: %s" , msg , _output , exc_info = e )
136
+ logger .error (
137
+ "%s\n output: %s\n stderr: %s" ,
138
+ msg ,
139
+ _output ,
140
+ _output_stderr if ignore_stderr else "<in output>" ,
141
+ exc_info = e ,
142
+ )
134
143
raise e
135
144
145
+ return _output
146
+
136
147
137
148
def _rerender_feedstock (* , timeout ):
138
149
from conda_forge_feedstock_ops .os_utils import (
139
- chmod_plus_rwX ,
140
150
get_user_execute_permissions ,
141
151
reset_permissions_with_user_execute ,
142
152
sync_dirs ,
@@ -192,6 +202,13 @@ def _rerender_feedstock(*, timeout):
192
202
msg = "git init failed for rerender" ,
193
203
)
194
204
205
+ prev_commit = _execute_git_cmds_and_report (
206
+ cmds = [["git" , "rev-parse" , "HEAD" ]],
207
+ cwd = fs_dir ,
208
+ msg = "git rev-parse HEAD failed for rerender prev commit" ,
209
+ ignore_stderr = True ,
210
+ ).strip ()
211
+
195
212
if timeout is not None :
196
213
kwargs = {"timeout" : timeout }
197
214
else :
@@ -212,16 +229,38 @@ def _rerender_feedstock(*, timeout):
212
229
msg = "git status failed for rerender" ,
213
230
)
214
231
215
- # if something changed, copy back the new feedstock
216
232
if msg is not None :
217
233
output_permissions = get_user_execute_permissions (fs_dir )
218
- sync_dirs (fs_dir , input_fs_dir , ignore_dot_git = True , update_git = False )
234
+
235
+ _execute_git_cmds_and_report (
236
+ cmds = [
237
+ ["git" , "add" , "." ],
238
+ ["git" , "commit" , "-am" , msg ],
239
+ ],
240
+ cwd = fs_dir ,
241
+ msg = "git commit failed for rerender" ,
242
+ )
243
+ curr_commit = _execute_git_cmds_and_report (
244
+ cmds = [["git" , "rev-parse" , "HEAD" ]],
245
+ cwd = fs_dir ,
246
+ msg = "git rev-parse HEAD failed for rerender curr commit" ,
247
+ ignore_stderr = True ,
248
+ ).strip ()
249
+ patch = _execute_git_cmds_and_report (
250
+ cmds = [["git" , "diff" , prev_commit + ".." + curr_commit ]],
251
+ cwd = fs_dir ,
252
+ msg = "git diff failed for rerender" ,
253
+ ignore_stderr = True ,
254
+ )
219
255
else :
256
+ patch = None
220
257
output_permissions = input_permissions
221
258
222
- chmod_plus_rwX (input_fs_dir , recursive = True , skip_on_error = True )
223
-
224
- return {"commit_message" : msg , "permissions" : output_permissions }
259
+ return {
260
+ "commit_message" : msg ,
261
+ "patch" : patch ,
262
+ "permissions" : output_permissions ,
263
+ }
225
264
226
265
227
266
def _parse_package_and_feedstock_names ():
0 commit comments