mirror of
https://github.com/ratfactor/ziglings
synced 2024-05-11 04:36:04 +02:00
Compare commits
4 Commits
0d70a56943
...
3a7feae2b7
Author | SHA1 | Date | |
---|---|---|---|
Manlio Perillo | 3a7feae2b7 | ||
Dave Gauer | 7417f01d5d | ||
Dave Gauer | d699fc1824 | ||
Manlio Perillo | 9b0bf26e8d |
12
README.md
12
README.md
|
@ -1,5 +1,13 @@
|
|||
# Ziglings
|
||||
|
||||
## ⚠️ Attention! Ziglings has moved to Codeberg!
|
||||
|
||||
Check out our handy new URL: https://ziglings.org
|
||||
|
||||
Or visit the repo directly at: https://codeberg.org/ziglings/exercises
|
||||
|
||||
***
|
||||
|
||||
Welcome to Ziglings! This project contains a series of tiny
|
||||
broken programs (and one nasty surprise). By fixing them, you'll
|
||||
learn how to read and write [Zig](https://ziglang.org/) code.
|
||||
|
@ -51,8 +59,8 @@ $ zig version
|
|||
Clone this repository with Git:
|
||||
|
||||
```
|
||||
$ git clone https://github.com/ratfactor/ziglings
|
||||
$ cd ziglings
|
||||
$ git clone https://ziglings.org
|
||||
$ cd ziglings.org
|
||||
```
|
||||
|
||||
Then run `zig build` and follow the instructions to begin!
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
#!/bin/sh
|
||||
# Find the latest commit that is compatible with a specified Zig version, like
|
||||
# 0.10.1.
|
||||
#
|
||||
# The zig executable can be set using the ZIG_EXE environment variable.
|
||||
#
|
||||
# This script will clone the ziglings repository to the path specified by the
|
||||
# first parameter, that is required. Commits are processed in date order.
|
||||
|
||||
# Heals all the exercises.
|
||||
heal() {
|
||||
if [ ! -d exercises ]
|
||||
then
|
||||
echo "Must be run from the project root directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p patches/healed
|
||||
for original in exercises/*.zig; do
|
||||
name=$(basename "$original" .zig)
|
||||
patch_name="patches/patches/$name.patch"
|
||||
output="patches/healed/$name.zig"
|
||||
|
||||
if [ -f "$patch_name" ]; then
|
||||
patch -i "$patch_name" -o "$output" -s "$original"
|
||||
else
|
||||
printf "Cannot heal %s: no patch found\n" "$name"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Configure input parameters.
|
||||
if [ -z "$ZIG_EXE" ]; then
|
||||
echo '$ZIG_EXE is required'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
work_path="$1"
|
||||
if [ -z "$work_path" ] ; then
|
||||
echo "The work_path parameter is required and must be a directory"
|
||||
exit 1
|
||||
elif [ ! -d "$work_path" ]; then
|
||||
printf "%s does not exist\n" "$work_path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Clone ziglings repository.
|
||||
cd "$work_path" || exit 1
|
||||
echo "Cloning into 'ziglings'"
|
||||
git clone -q https://github.com/ratfactor/ziglings.git ziglings || exit 1
|
||||
|
||||
# Find a commit compatible with the specified Zig version.
|
||||
cd ziglings || exit 1
|
||||
for commit in $(git log --date-order --pretty=format:"%H"); do
|
||||
git checkout --detach -q "$commit"
|
||||
printf "\nTesting commit %s\n" "$commit"
|
||||
|
||||
heal
|
||||
|
||||
# Some versions exits with exit code 0 instead of 1, if version check fails.
|
||||
sed -i 's/exit(0)/exit(1)/g' build.zig
|
||||
|
||||
"$ZIG_EXE" build -Dhealed
|
||||
zig_ret=$?
|
||||
|
||||
git restore build.zig
|
||||
|
||||
if [ "$zig_ret" -eq 0 ]; then
|
||||
printf "Find working commit: %s\n" "$commit"
|
||||
exit 0
|
||||
fi
|
||||
done
|
Loading…
Reference in New Issue