@@ -137,11 +137,14 @@ jobs:
137
137
uses : peter-evans/create-pull-request@v7
138
138
with :
139
139
title : ' Update subtree/library to ${{ env.NEXT_TOOLCHAIN_DATE }}'
140
- body : |
140
+ body : >
141
141
This is an automated PR to update the subtree/library branch to the changes
142
- from ${{ env.CURRENT_TOOLCHAIN_DATE }} (${{ env.CURRENT_COMMIT_HASH }})
143
- to ${{ env.NEXT_TOOLCHAIN_DATE }} (${{ env.NEXT_COMMIT_HASH }}), inclusive.
144
- **Do not merge this PR using the merge queue. Instead, use the rebase strategy.**
142
+ from ${{ env.CURRENT_TOOLCHAIN_DATE }} (rust-lang/rust@${{ env.CURRENT_COMMIT_HASH }})
143
+ to ${{ env.NEXT_TOOLCHAIN_DATE }} (rust-lang/rust@${{ env.NEXT_COMMIT_HASH }}), inclusive.
144
+
145
+ **Review this PR as usual, but do not merge this PR using the GitHub web interface.
146
+ Instead, once it is approved, use `git push` to literally push the changes to `subtree/library`
147
+ without any rebase or merge.**
145
148
branch : update-subtree/library
146
149
delete-branch : true
147
150
base : subtree/library
@@ -151,20 +154,36 @@ jobs:
151
154
if : ${{ env.MERGE_CONFLICTS != 'noop' && env.MERGE_PR_EXISTS == 'no' }}
152
155
run : |
153
156
cd verify-rust-std
154
- if ! git rev-parse --verify subtree/library; then
157
+ # create-pull-request resets branches locally, implying that
158
+ # `subtree/library` no longer is what the above instructions created.
159
+ if [ "${SUBTREE_PR_EXISTS}" = "yes" ]; then
155
160
git checkout -t -b subtree/library origin/update-subtree/library
161
+ else
162
+ git checkout subtree/library
163
+ git reset --hard origin/update-subtree/library
156
164
fi
157
165
git checkout main
158
166
167
+ # Tell git about the correct merge base to use, which is the subtree
168
+ # head that we last merged from.
169
+ PREV_SUBTREE_HEAD=$(git log --grep="^git-subtree-split:" | egrep '^[[:space:]]+git-subtree-split:' | awk '{print $2;exit}')
170
+ echo "Previous subtree head: ${PREV_SUBTREE_HEAD}"
171
+ git replace --graft subtree/library ${PREV_SUBTREE_HEAD}
172
+ git replace --graft main ${PREV_SUBTREE_HEAD}
173
+
159
174
# This command may fail, which will require human intervention.
160
175
if ! git \
161
176
-c user.name=gitbot -c user.email=git@bot \
162
- subtree merge --prefix =library subtree/library --squash ; then
177
+ merge -Xsubtree =library subtree/library; then
163
178
echo "MERGE_CONFLICTS=yes" >> $GITHUB_ENV
164
179
git -c user.name=gitbot -c user.email=git@bot commit -a -m "Merge from $NEXT_COMMIT_HASH with conflicts"
165
180
else
166
181
echo "MERGE_CONFLICTS=no" >> $GITHUB_ENV
167
182
fi
183
+ git replace -d subtree/library
184
+ git replace -d main~1
185
+ NEW_SUBTREE_HEAD=$(git rev-parse subtree/library)
186
+ echo "NEW_SUBTREE_HEAD=${NEW_SUBTREE_HEAD}" >> $GITHUB_ENV
168
187
169
188
sed -i "s/^channel = \"nightly-.*\"/channel = \"nightly-${NEXT_TOOLCHAIN_DATE}\"/" rust-toolchain.toml
170
189
git -c user.name=gitbot -c user.email=git@bot \
@@ -173,16 +192,22 @@ jobs:
173
192
sed -i "s/commit = .*/commit = \"${KANI_COMMIT_HASH}\"/" tool_config/kani-version.toml
174
193
git -c user.name=gitbot -c user.email=git@bot \
175
194
commit -m "Update Kani version to ${KANI_COMMIT_HASH}" tool_config/kani-version.toml
195
+
176
196
- name : Create Pull Request without conflicts
177
197
if : ${{ env.MERGE_CONFLICTS == 'no' && env.MERGE_PR_EXISTS == 'no' }}
178
198
uses : peter-evans/create-pull-request@v7
179
199
with :
180
200
title : ' Merge subtree update for toolchain nightly-${{ env.NEXT_TOOLCHAIN_DATE }}'
181
- body : |
201
+ body : >
182
202
This is an automated PR to merge library subtree updates
183
- from ${{ env.CURRENT_TOOLCHAIN_DATE }} (${{ env.CURRENT_COMMIT_HASH }})
184
- to ${{ env.NEXT_TOOLCHAIN_DATE }} (${{ env.NEXT_COMMIT_HASH }}), inclusive.
203
+ from ${{ env.CURRENT_TOOLCHAIN_DATE }} (rust-lang/rust@ ${{ env.CURRENT_COMMIT_HASH }})
204
+ to ${{ env.NEXT_TOOLCHAIN_DATE }} (rust-lang/rust@ ${{ env.NEXT_COMMIT_HASH }}), inclusive.
185
205
This is a clean merge, no conflicts were detected.
206
+ **Do not remove or edit the following annotations:**
207
+
208
+ git-subtree-dir: library
209
+
210
+ git-subtree-split: ${{ env.NEW_SUBTREE_HEAD }}
186
211
branch : sync-${{ env.NEXT_TOOLCHAIN_DATE }}
187
212
delete-branch : true
188
213
base : main
@@ -193,12 +218,17 @@ jobs:
193
218
uses : peter-evans/create-pull-request@v7
194
219
with :
195
220
title : ' Merge subtree update for toolchain nightly-${{ env.NEXT_TOOLCHAIN_DATE }}'
196
- body : |
221
+ body : >
197
222
This is an automated PR to merge library subtree updates
198
- from ${{ env.CURRENT_TOOLCHAIN_DATE }} (${{ env.CURRENT_COMMIT_HASH }})
199
- to ${{ env.NEXT_TOOLCHAIN_DATE }} (${{ env.NEXT_COMMIT_HASH }}) (inclusive)
223
+ from ${{ env.CURRENT_TOOLCHAIN_DATE }} (rust-lang/rust@ ${{ env.CURRENT_COMMIT_HASH }})
224
+ to ${{ env.NEXT_TOOLCHAIN_DATE }} (rust-lang/rust@ ${{ env.NEXT_COMMIT_HASH }}) (inclusive)
200
225
into main. `git merge` resulted in conflicts, which require manual resolution.
201
226
Files were commited with merge conflict markers.
227
+ **Do not remove or edit the following annotations:**
228
+
229
+ git-subtree-dir: library
230
+
231
+ git-subtree-split: ${{ env.NEW_SUBTREE_HEAD }}
202
232
branch : sync-${{ env.NEXT_TOOLCHAIN_DATE }}
203
233
delete-branch : true
204
234
base : main
0 commit comments