File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ #! /usr/bin/env bash
2
+
3
+ # This script can be installed in .git/config to allow rebasing old patches across
4
+ # libc++'s clang-format of the whole tree. Most contributors should not require that
5
+ # since they don't have many pre-clang-format patches lying around. This script is to
6
+ # make it easier for contributors that do have such patches.
7
+ #
8
+ # The script is installed by running the following from the root of your repository:
9
+ #
10
+ # $ git config merge.libcxx-reformat.name "Run clang-format when rebasing libc++ patches"
11
+ # $ git config merge.libcxx-reformat.driver "libcxx/utils/clang-format-merge-driver.sh %O %A %B %P"
12
+ #
13
+ # This is based on https://github.com/nico/hack/blob/main/notes/auto_git_rebase_across_mechanical_changes.md.
14
+ # Many thanks to Nico Weber for paving the way here.
15
+
16
+ # Path to the file's contents at the ancestor's version.
17
+ base=" $1 "
18
+
19
+ # Path to the file's contents at the current version.
20
+ current=" $2 "
21
+
22
+ # Path to the file's contents at the other branch's version (for nonlinear histories, there might be multiple other branches).
23
+ other=" $3 "
24
+
25
+ # The path of the file in the repository.
26
+ path=" $4 "
27
+
28
+ clang-format --style=file --assume-filename=" $path " < " $base " > " $base .tmp"
29
+ mv " $base .tmp" " $base "
30
+
31
+ clang-format --style=file --assume-filename=" $path " < " $current " > " $current .tmp"
32
+ mv " $current .tmp" " $current "
33
+
34
+ clang-format --style=file --assume-filename=" $path " < " $other " > " $other .tmp"
35
+ mv " $other .tmp" " $other "
36
+
37
+ git merge-file -Lcurrent -Lbase -Lother " $current " " $base " " $other "
You can’t perform that action at this time.
0 commit comments