-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ae20a3a
commit f6879da
Showing
1 changed file
with
218 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,218 @@ | ||
#!/bin/bash | ||
|
||
set -o errexit | ||
|
||
marker_base=985c80fbc6131f3a8cedd0da7e8af98dfceb13c7 | ||
marker_commit=${1:-${marker_base}} | ||
|
||
if [ $(git merge-base ${marker_commit} ${marker_base}) != ${marker_base} ]; then | ||
echo "first marker commit not an ancestor: ${marker_commit}" | ||
exit 1 | ||
fi | ||
|
||
if [ $(git merge-base ${marker_commit} HEAD) != $(git rev-parse --verify ${marker_commit}) ]; then | ||
echo "given marker commit not an ancestor: ${marker_commit}" | ||
exit 1 | ||
fi | ||
|
||
if [ -e Builds/CMake ]; then | ||
echo move CMake | ||
git mv Builds/CMake cmake | ||
git add --update . | ||
git commit -m 'Move CMake directory' --author 'Pretty Printer <cpp@ripple.com>' | ||
fi | ||
|
||
if [ -e src/ripple ]; then | ||
|
||
echo move protocol buffers | ||
mkdir -p include/xrpl | ||
if [ -e src/ripple/proto ]; then | ||
git mv src/ripple/proto include/xrpl | ||
fi | ||
|
||
extract_list() { | ||
git show ${marker_commit}:Builds/CMake/RippledCore.cmake | \ | ||
awk "/END ${1}/ { p = 0 } p && /src\/ripple/; /BEGIN ${1}/ { p = 1 }" | \ | ||
sed -e 's#src/ripple/##' -e 's#[^a-z]\+$##' | ||
} | ||
|
||
move_files() { | ||
oldroot="$1"; shift | ||
newroot="$1"; shift | ||
detail="$1"; shift | ||
files=("$@") | ||
for file in ${files[@]}; do | ||
if [ ! -e ${oldroot}/${file} ]; then | ||
continue | ||
fi | ||
dir=$(dirname ${file}) | ||
if [ $(basename ${dir}) == 'details' ]; then | ||
dir=$(dirname ${dir}) | ||
fi | ||
if [ $(basename ${dir}) == 'impl' ]; then | ||
dir="$(dirname ${dir})/${detail}" | ||
fi | ||
mkdir -p ${newroot}/${dir} | ||
git mv ${oldroot}/${file} ${newroot}/${dir} | ||
done | ||
} | ||
|
||
echo move libxrpl headers | ||
files=$(extract_list 'LIBXRPL HEADERS') | ||
files+=( | ||
basics/SlabAllocator.h | ||
|
||
beast/asio/io_latency_probe.h | ||
beast/container/aged_container.h | ||
beast/container/aged_container_utility.h | ||
beast/container/aged_map.h | ||
beast/container/aged_multimap.h | ||
beast/container/aged_multiset.h | ||
beast/container/aged_set.h | ||
beast/container/aged_unordered_map.h | ||
beast/container/aged_unordered_multimap.h | ||
beast/container/aged_unordered_multiset.h | ||
beast/container/aged_unordered_set.h | ||
beast/container/detail/aged_associative_container.h | ||
beast/container/detail/aged_container_iterator.h | ||
beast/container/detail/aged_ordered_container.h | ||
beast/container/detail/aged_unordered_container.h | ||
beast/container/detail/empty_base_optimization.h | ||
beast/core/LockFreeStack.h | ||
beast/insight/Collector.h | ||
beast/insight/Counter.h | ||
beast/insight/CounterImpl.h | ||
beast/insight/Event.h | ||
beast/insight/EventImpl.h | ||
beast/insight/Gauge.h | ||
beast/insight/GaugeImpl.h | ||
beast/insight/Group.h | ||
beast/insight/Groups.h | ||
beast/insight/Hook.h | ||
beast/insight/HookImpl.h | ||
beast/insight/Insight.h | ||
beast/insight/Meter.h | ||
beast/insight/MeterImpl.h | ||
beast/insight/NullCollector.h | ||
beast/insight/StatsDCollector.h | ||
beast/test/fail_counter.h | ||
beast/test/fail_stream.h | ||
beast/test/pipe_stream.h | ||
beast/test/sig_wait.h | ||
beast/test/string_iostream.h | ||
beast/test/string_istream.h | ||
beast/test/string_ostream.h | ||
beast/test/test_allocator.h | ||
beast/test/yield_to.h | ||
beast/utility/hash_pair.h | ||
beast/utility/maybe_const.h | ||
beast/utility/temp_dir.h | ||
|
||
# included by only json/impl/json_assert.h | ||
json/json_errors.h | ||
|
||
protocol/PayChan.h | ||
protocol/RippleLedgerHash.h | ||
protocol/messages.h | ||
protocol/st.h | ||
) | ||
files+=( | ||
basics/README.md | ||
crypto/README.md | ||
json/README.md | ||
protocol/README.md | ||
resource/README.md | ||
) | ||
move_files src/ripple include/xrpl detail ${files[@]} | ||
|
||
echo move libxrpl sources | ||
files=$(extract_list 'LIBXRPL SOURCES') | ||
move_files src/ripple src/libxrpl "" ${files[@]} | ||
|
||
echo check leftovers | ||
dirs=$(cd include/xrpl; ls -d */) | ||
dirs=$(cd src/ripple; ls -d ${dirs} 2>/dev/null || true) | ||
files="$(cd src/ripple; find ${dirs} -type f)" | ||
if [ -n "${files}" ]; then | ||
echo "leftover files:" | ||
echo ${files} | ||
exit | ||
fi | ||
|
||
echo remove empty directories | ||
empty_dirs="$(cd src/ripple; find ${dirs} -depth -type d)" | ||
for dir in ${empty_dirs[@]}; do | ||
if [ -e ${dir} ]; then | ||
rmdir ${dir} | ||
fi | ||
done | ||
|
||
echo move xrpld sources | ||
files=$( | ||
extract_list 'XRPLD SOURCES' | ||
cd src/ripple | ||
find * -regex '.*\.\(h\|ipp\|md\|pu\|uml\|png\)' | ||
) | ||
move_files src/ripple src/xrpld detail ${files[@]} | ||
|
||
files="$(cd src/ripple; find . -type f)" | ||
if [ -n "${files}" ]; then | ||
echo "leftover files:" | ||
echo ${files} | ||
exit | ||
fi | ||
|
||
fi | ||
|
||
rm -rf src/ripple | ||
|
||
echo rename .hpp to .h | ||
find include src -name '*.hpp' -exec bash -c 'f="{}"; git mv "${f}" "${f%hpp}h"' \; | ||
|
||
echo move PerfLog.h | ||
if [ -e include/xrpl/basics/PerfLog.h ]; then | ||
git mv include/xrpl/basics/PerfLog.h src/xrpld/perflog | ||
fi | ||
|
||
# Make sure all protobuf includes have the correct prefix. | ||
protobuf_replace='s:^#include\s*["<].*org/xrpl\([^">]\+\)[">]:#include <xrpl/proto/org/xrpl\1>:' | ||
# Make sure first-party includes use angle brackets and .h extension. | ||
ripple_replace='s:include\s*["<]ripple/\(.*\)\.h\(pp\)\?[">]:include <ripple/\1.h>:' | ||
beast_replace='s:include\s*<beast/:include <xrpl/beast/:' | ||
# Rename impl directories to detail. | ||
impl_rename='s:\(<xrpl.*\)/impl\(/details\)\?/:\1/detail/:' | ||
|
||
echo rewrite includes in libxrpl | ||
find include/xrpl src/libxrpl -type f -exec sed -i \ | ||
-e "${protobuf_replace}" \ | ||
-e "${ripple_replace}" \ | ||
-e "${beast_replace}" \ | ||
-e 's:^#include <ripple/:#include <xrpl/:' \ | ||
-e "${impl_rename}" \ | ||
{} + | ||
|
||
echo rewrite includes in xrpld | ||
# # https://www.baeldung.com/linux/join-multiple-lines | ||
libxrpl_dirs="$(cd include/xrpl; ls -d1 */ | sed 's:/$::')" | ||
# libxrpl_dirs='a\nb\nc\n' | ||
readarray -t libxrpl_dirs <<< "${libxrpl_dirs}" | ||
# libxrpl_dirs=(a b c) | ||
libxrpl_dirs=$(printf -v txt '%s\\|' "${libxrpl_dirs[@]}"; echo "${txt%\\|}") | ||
# libxrpl_dirs='a\|b\|c' | ||
find src/xrpld src/test -type f -exec sed -i \ | ||
-e "${protobuf_replace}" \ | ||
-e "${ripple_replace}" \ | ||
-e "${beast_replace}" \ | ||
-e "s:^#include <ripple/basics/PerfLog.h>:#include <xrpld/perflog/PerfLog.h>:" \ | ||
-e "s:^#include <ripple/\(${libxrpl_dirs}\)/:#include <xrpl/\1/:" \ | ||
-e 's:^#include <ripple/:#include <xrpld/:' \ | ||
-e "${impl_rename}" \ | ||
{} + | ||
|
||
git commit -m 'Rearrange sources' --author 'Pretty Printer <cpp@ripple.com>' | ||
find include src -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.ipp' \) -exec clang-format-10 -i {} + | ||
git add --update . | ||
git commit -m 'Rewrite includes' --author 'Pretty Printer <cpp@ripple.com>' | ||
./Builds/levelization/levelization.sh | ||
git add --update . | ||
git commit -m 'Recompute loops' --author 'Pretty Printer <cpp@ripple.com>' |