-
Notifications
You must be signed in to change notification settings - Fork 68
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #57 from ranma42/tar-xz
Add generation of XZ-compressed tarballs
- Loading branch information
Showing
5 changed files
with
292 additions
and
13 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 |
---|---|---|
@@ -1,2 +1,7 @@ | ||
addons: | ||
apt: | ||
packages: | ||
- p7zip-full | ||
|
||
script: | ||
- ./test.sh |
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
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
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,278 @@ | ||
#!/bin/sh | ||
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT | ||
# file at the top-level directory of this distribution and at | ||
# http://rust-lang.org/COPYRIGHT. | ||
# | ||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
# option. This file may not be copied, modified, or distributed | ||
# except according to those terms. | ||
|
||
set -ue | ||
|
||
msg() { | ||
echo "make-tarballs: ${1-}" | ||
} | ||
|
||
step_msg() { | ||
msg | ||
msg "$1" | ||
msg | ||
} | ||
|
||
warn() { | ||
echo "make-tarballs: WARNING: $1" >&2 | ||
} | ||
|
||
err() { | ||
echo "make-tarballs: error: $1" >&2 | ||
exit 1 | ||
} | ||
|
||
need_ok() { | ||
if [ $? -ne 0 ] | ||
then | ||
err "$1" | ||
fi | ||
} | ||
|
||
need_cmd() { | ||
if command -v $1 >/dev/null 2>&1 | ||
then msg "found $1" | ||
else err "need $1" | ||
fi | ||
} | ||
|
||
putvar() { | ||
local t | ||
local tlen | ||
eval t=\$$1 | ||
eval tlen=\${#$1} | ||
if [ $tlen -gt 35 ] | ||
then | ||
printf "make-tarballs: %-20s := %.35s ...\n" $1 "$t" | ||
else | ||
printf "make-tarballs: %-20s := %s %s\n" $1 "$t" | ||
fi | ||
} | ||
|
||
valopt() { | ||
VAL_OPTIONS="$VAL_OPTIONS $1" | ||
|
||
local op=$1 | ||
local default=$2 | ||
shift | ||
shift | ||
local doc="$*" | ||
if [ $HELP -eq 0 ] | ||
then | ||
local uop=$(echo $op | tr '[:lower:]' '[:upper:]' | tr '\-' '\_') | ||
local v="CFG_${uop}" | ||
eval $v="$default" | ||
for arg in $CFG_ARGS | ||
do | ||
if echo "$arg" | grep -q -- "--$op=" | ||
then | ||
local val=$(echo "$arg" | cut -f2 -d=) | ||
eval $v=$val | ||
fi | ||
done | ||
putvar $v | ||
else | ||
if [ -z "$default" ] | ||
then | ||
default="<none>" | ||
fi | ||
op="${op}=[${default}]" | ||
printf " --%-30s %s\n" "$op" "$doc" | ||
fi | ||
} | ||
|
||
opt() { | ||
BOOL_OPTIONS="$BOOL_OPTIONS $1" | ||
|
||
local op=$1 | ||
local default=$2 | ||
shift | ||
shift | ||
local doc="$*" | ||
local flag="" | ||
|
||
if [ $default -eq 0 ] | ||
then | ||
flag="enable" | ||
else | ||
flag="disable" | ||
doc="don't $doc" | ||
fi | ||
|
||
if [ $HELP -eq 0 ] | ||
then | ||
for arg in $CFG_ARGS | ||
do | ||
if [ "$arg" = "--${flag}-${op}" ] | ||
then | ||
op=$(echo $op | tr 'a-z-' 'A-Z_') | ||
flag=$(echo $flag | tr 'a-z' 'A-Z') | ||
local v="CFG_${flag}_${op}" | ||
eval $v=1 | ||
putvar $v | ||
fi | ||
done | ||
else | ||
if [ ! -z "$META" ] | ||
then | ||
op="$op=<$META>" | ||
fi | ||
printf " --%-30s %s\n" "$flag-$op" "$doc" | ||
fi | ||
} | ||
|
||
flag() { | ||
BOOL_OPTIONS="$BOOL_OPTIONS $1" | ||
|
||
local op=$1 | ||
shift | ||
local doc="$*" | ||
|
||
if [ $HELP -eq 0 ] | ||
then | ||
for arg in $CFG_ARGS | ||
do | ||
if [ "$arg" = "--${op}" ] | ||
then | ||
op=$(echo $op | tr 'a-z-' 'A-Z_') | ||
local v="CFG_${op}" | ||
eval $v=1 | ||
putvar $v | ||
fi | ||
done | ||
else | ||
if [ ! -z "$META" ] | ||
then | ||
op="$op=<$META>" | ||
fi | ||
printf " --%-30s %s\n" "$op" "$doc" | ||
fi | ||
} | ||
|
||
validate_opt () { | ||
for arg in $CFG_ARGS | ||
do | ||
local is_arg_valid=0 | ||
for option in $BOOL_OPTIONS | ||
do | ||
if test --disable-$option = $arg | ||
then | ||
is_arg_valid=1 | ||
fi | ||
if test --enable-$option = $arg | ||
then | ||
is_arg_valid=1 | ||
fi | ||
if test --$option = $arg | ||
then | ||
is_arg_valid=1 | ||
fi | ||
done | ||
for option in $VAL_OPTIONS | ||
do | ||
if echo "$arg" | grep -q -- "--$option=" | ||
then | ||
is_arg_valid=1 | ||
fi | ||
done | ||
if [ "$arg" = "--help" ] | ||
then | ||
echo | ||
echo "No more help available for Configure options," | ||
echo "check the Wiki or join our IRC channel" | ||
break | ||
else | ||
if test $is_arg_valid -eq 0 | ||
then | ||
err "Option '$arg' is not recognized" | ||
fi | ||
fi | ||
done | ||
} | ||
|
||
# Prints the absolute path of a directory to stdout | ||
abs_path() { | ||
local path="$1" | ||
# Unset CDPATH because it causes havok: it makes the destination unpredictable | ||
# and triggers 'cd' to print the path to stdout. Route `cd`'s output to /dev/null | ||
# for good measure. | ||
(unset CDPATH && cd "$path" > /dev/null && pwd) | ||
} | ||
|
||
msg "looking for programs" | ||
msg | ||
|
||
need_cmd tar | ||
need_cmd rm | ||
need_cmd mkdir | ||
need_cmd echo | ||
need_cmd tr | ||
need_cmd find | ||
need_cmd rev | ||
need_cmd sort | ||
need_cmd gzip | ||
need_cmd 7z | ||
|
||
CFG_ARGS="$@" | ||
|
||
HELP=0 | ||
if [ "$1" = "--help" ] | ||
then | ||
HELP=1 | ||
shift | ||
echo | ||
echo "Usage: $0 [options]" | ||
echo | ||
echo "Options:" | ||
echo | ||
else | ||
step_msg "processing arguments" | ||
fi | ||
|
||
OPTIONS="" | ||
BOOL_OPTIONS="" | ||
VAL_OPTIONS="" | ||
|
||
valopt input "package" "The input folder to be compressed" | ||
valopt output "./dist" "The prefix of the tarballs" | ||
valopt work-dir "./workdir" "The folder in which the input is to be found" | ||
|
||
if [ $HELP -eq 1 ] | ||
then | ||
echo | ||
exit 0 | ||
fi | ||
|
||
step_msg "validating arguments" | ||
validate_opt | ||
|
||
rm -Rf "$CFG_OUTPUT.tar.gz" | ||
need_ok "couldn't delete old gz tarball" | ||
|
||
rm -Rf "$CFG_OUTPUT.tar.xz" | ||
need_ok "couldn't delete old xz tarball" | ||
|
||
# Make a tarball | ||
cd "$CFG_WORK_DIR" | ||
|
||
# Sort files by their suffix, to group files with the same name from | ||
# different locations (likely identical) and files with the same | ||
# extension (likely containing similar data). | ||
find "$CFG_INPUT" \( -type d -empty \) -or \( -not -type d \) \ | ||
| rev | sort | rev | tar -cf "$CFG_OUTPUT.tar" -T - | ||
need_ok "failed to tar" | ||
|
||
# xz -9 -T2 --keep "$CFG_OUTPUT.tar" | ||
7z a -bd -txz -mx=9 -mmt=off "$CFG_OUTPUT.tar.xz" "$CFG_OUTPUT.tar" | ||
need_ok "failed to xz" | ||
|
||
gzip "$CFG_OUTPUT.tar" | ||
need_ok "failed to gzip" |
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