diff --git a/libs/setup.sh b/libs/setup.sh index ce05a2dd3..453b44808 100755 --- a/libs/setup.sh +++ b/libs/setup.sh @@ -5,106 +5,115 @@ working_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd ${working_dir} -# Cleanup existing dependencies. -./cleanup.sh +# Clones a git repository and optionally cherry picks additional commits. The +# function will try to preserve any local changes in the repo. +# clone GIT_REPO DIR_NAME CHECKOUT_ID [CHERRY_PICK_ID]... +clone () { + local git_repo=$1 + local dir_name=$2 + local checkout_id=$3 + shift 3 + # Clone if there's no repo. + if [[ ! -d "$dir_name" ]]; then + git clone "$git_repo" "$dir_name" + fi + pushd "$dir_name" + # Just fetch new commits from remote repository. Don't merge/pull them in, so + # that we don't clobber local modifications. + git fetch + # Check whether we have any local changes which need to be preserved. + local local_changes=true + if git diff --no-ext-diff --quiet && git diff --no-ext-diff --cached --quiet; then + local_changes=false + fi + # Stash regardless of local_changes, so that a user gets a message on stdout. + git stash + # Checkout the primary commit (there's no need to pull/merge). + git checkout $checkout_id + # Apply any optional cherry pick fixes. + while [[ $# -ne 0 ]]; do + local cherry_pick_id=$1 + shift + git cherry-pick -n $cherry_pick_id + done + # Reapply any local changes. + if [[ $local_changes == true ]]; then + git stash pop + fi + popd +} # antlr antlr_generator_filename="antlr-4.6-complete.jar" # wget -O ${antlr_generator_filename} http://www.antlr.org/download/${antlr_generator_filename} wget -nv -O ${antlr_generator_filename} http://deps.memgraph.io/${antlr_generator_filename} # git clone https://github.com/antlr/antlr4.git -git clone git://deps.memgraph.io/antlr4.git antlr4_tag="aacd2a2c95816d8dc1c05814051d631bfec4cf3e" # v4.6 -cd antlr4 -git checkout ${antlr4_tag} -cd .. +clone git://deps.memgraph.io/antlr4.git antlr4 $antlr4_tag # cppitertools # Use our fork that uses experimental/optional instead of unique_ptr in # DerefHolder. Once we move memgraph to c++17 we can use cpp17 branch from # original repo. # git clone https://github.com/memgraph/cppitertools.git -git clone git://deps.memgraph.io/cppitertools.git -cd cppitertools cppitertools_tag="4231e0bc6fba2737b2a7a8a1576cf06186b0de6a" # experimental_optional 17 Aug 2017 -git checkout ${cppitertools_tag} -cd .. +clone git://deps.memgraph.io/cppitertools.git cppitertools $cppitertools_tag # fmt # git clone https://github.com/fmtlib/fmt.git -git clone git://deps.memgraph.io/fmt.git fmt_tag="7fa8f8fa48b0903deab5bb42e6760477173ac485" # v3.0.1 # Commit which fixes an issue when compiling with C++14 and higher. fmt_cxx14_fix="b9aaa507fc49680d037fd84c043f747a395bce04" -cd fmt -git checkout ${fmt_tag} -git cherry-pick -n ${fmt_cxx14_fix} -cd .. +clone git://deps.memgraph.io/fmt.git fmt $fmt_tag $fmt_cxx14_fix # rapidcheck # git clone https://github.com/emil-e/rapidcheck.git -git clone git://deps.memgraph.io/rapidcheck.git rapidcheck_tag="853e14f0f4313a9eb3c71e24848373e7b843dfd1" # Jun 23, 2017 -cd rapidcheck -git checkout ${rapidcheck_tag} -cd .. +clone git://deps.memgraph.io/rapidcheck.git rapidcheck $rapidcheck_tag # google benchmark # git clone https://github.com/google/benchmark.git -git clone git://deps.memgraph.io/benchmark.git benchmark_tag="4f8bfeae470950ef005327973f15b0044eceaceb" # v1.1.0 -cd benchmark -git checkout ${benchmark_tag} -cd .. +clone git://deps.memgraph.io/benchmark.git benchmark $benchmark_tag # google test # git clone https://github.com/google/googletest.git -git clone git://deps.memgraph.io/googletest.git googletest_tag="ec44c6c1675c25b9827aacd08c02433cccde7780" # v1.8.0 -cd googletest -git checkout ${googletest_tag} -cd .. +clone git://deps.memgraph.io/googletest.git googletest $googletest_tag # google logging # git clone https://github.com/memgraph/glog.git -git clone git://deps.memgraph.io/glog.git glog_tag="042a21657e79784226babab8b942f7bd0949635f" # custom version (v0.3.5+) -cd glog -git checkout ${glog_tag} -cd .. +clone git://deps.memgraph.io/glog.git glog $glog_tag # lcov-to-coberatura-xml # git clone https://github.com/eriwen/lcov-to-cobertura-xml.git -git clone git://deps.memgraph.io/lcov-to-cobertura-xml.git lcov_to_xml_tag="59584761cb5da4687693faec05bf3e2b74e9dde9" # Dec 6, 2016 -cd lcov-to-cobertura-xml -git checkout ${lcov_to_xml_tag} -cd .. +clone git://deps.memgraph.io/lcov-to-cobertura-xml.git lcov-to-cobertura-xml $lcov_to_xml_tag # google flags # git clone https://github.com/memgraph/gflags.git -git clone git://deps.memgraph.io/gflags.git gflags_tag="b37ceb03a0e56c9f15ce80409438a555f8a67b7c" # custom version (May 6, 2017) -cd gflags -git checkout ${gflags_tag} -cd .. +clone git://deps.memgraph.io/gflags.git gflags $gflags_tag # neo4j wget -nv http://deps.memgraph.io/neo4j-community-3.2.3-unix.tar.gz -O neo4j.tar.gz tar -xzf neo4j.tar.gz +rm -rf neo4j mv neo4j-community-3.2.3 neo4j rm neo4j.tar.gz # postgresql wget -nv http://deps.memgraph.io/postgresql-9.6.5-1-linux-x64-binaries.tar.gz -O postgres.tar.gz tar -xzf postgres.tar.gz +rm -rf postgresql mv pgsql postgresql rm postgres.tar.gz # nlohmann json # We wget header instead of cloning repo since repo is huge (lots of test data). # We use head on Sep 1, 2017 instead of last release since it was long time ago. -mkdir json +mkdir -p json cd json # wget "https://raw.githubusercontent.com/nlohmann/json/91e003285312167ad8365f387438ea371b465a7e/src/json.hpp" wget -nv http://deps.memgraph.io/json.hpp @@ -112,15 +121,9 @@ cd .. # ltalloc # git clone https://github.com/r-lyeh/ltalloc.git -git clone git://deps.memgraph.io/ltalloc.git ltalloc_tag="43b51c14857111f993f277c46151fdfac91525a2" # Nov 16, 2017 -cd ltalloc -git checkout ${ltalloc_tag} -cd .. +clone git://deps.memgraph.io/ltalloc.git ltalloc $ltalloc_tag # cereal #git clone https://github.com/USCiLab/cereal.git -git clone git://deps.memgraph.io/cereal.git -cd cereal -git checkout v1.2.2 -cd .. +clone git://deps.memgraph.io/cereal.git cereal v1.2.2