From 32b7b88beeb49d6ff8fea8b9dec7eceec0794221 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Sat, 23 Mar 2019 11:30:36 +0000 Subject: [PATCH 1/5] Add intial portable msys2 --- make-file-list-msys2.sh | 200 ++++++++++++++++++ portable-msys2/release.sh | 154 ++++++++++++++ portable-msys2/root/README.portable | 106 ++++++++++ .../root/etc/post-install/13-copy-dlls.post | 24 +++ .../root/etc/post-install/release-bash.sh | 153 ++++++++++++++ .../root/usr/share/git/git-for-windows.ico | Bin 0 -> 107434 bytes portable-msys2/root/usr/share/git/git.ico | Bin 0 -> 55316 bytes 7 files changed, 637 insertions(+) create mode 100644 make-file-list-msys2.sh create mode 100644 portable-msys2/release.sh create mode 100644 portable-msys2/root/README.portable create mode 100644 portable-msys2/root/etc/post-install/13-copy-dlls.post create mode 100644 portable-msys2/root/etc/post-install/release-bash.sh create mode 100644 portable-msys2/root/usr/share/git/git-for-windows.ico create mode 100644 portable-msys2/root/usr/share/git/git.ico diff --git a/make-file-list-msys2.sh b/make-file-list-msys2.sh new file mode 100644 index 0000000000..3b4db7ee52 --- /dev/null +++ b/make-file-list-msys2.sh @@ -0,0 +1,200 @@ +#!/bin/sh + +die () { + echo "$*" >&2 + exit 1 +} + +test -n "$ARCH" && +test -n "$BITNESS" || +die "Need ARCH and BITNESS to be set" + +pacman_list () { + package_list=$(for arg + do + pactree -u "$arg" + done | + grep -v "^\\($(echo $PACKAGE_EXCLUDES | sed \ + -e 's/ /\\|/g' \ + -e 's/mingw-w64-/&\\(i686\\|x86_64\\)-/g')\\)\$" | + sort | + uniq) && + if test -n "$PACKAGE_VERSIONS_FILE" + then + pacman -Q $package_list >"$PACKAGE_VERSIONS_FILE" + fi && + pacman -Ql $package_list | + grep -v '/$' | + sed 's/^[^ ]* //' +} + +install_required () { + # TODO some of these might not be wanted + # Packages that have been added after Git SDK 1.0.0 was released... + required= + for req in mingw-w64-$ARCH-git-credential-manager $SH_FOR_REBASE + do + test -d /var/lib/pacman/local/$req-[0-9]* || + test -d /var/lib/pacman/local/$req-git-[0-9]* || + required="$required $req" + done + test -z "$required" || + pacman -Sy --noconfirm $required >&2 || + die "Could not install required packages: $required" +} + +this_script_dir="$(cd "$(dirname "$0")" && pwd -W)" || +die "Could not determine this script's dir" + +install_required + +SH_FOR_REBASE=dash +PACKAGE_EXCLUDES="db info heimdal git util-linux curl git-for-windows-keyring + mingw-w64-p11-kit mingw-w64-bzip2 mingw-w64-c-ares + mingw-w64-libsystre mingw-w64-libtre-git + mingw-w64-tcl mingw-w64-tk mingw-w64-wineditline gdbm icu libdb + libedit libgdbm perl perl-.*" +# TODO following required by filesystem package but is missing +# TODO should we exlude all the tz stuff? +EXTRA_FILE_EXCLUDES="/etc/post-install/05-home-dir.post" + +BASE_PACKAGES="$(pacman -Qg base | awk '{print $2}' | tr '\n' ' ')" +GIT_PACKAGES="mingw-w64-$ARCH-git mingw-w64-$ARCH-git-credential-manager git-extra openssh" +UTIL_PACKAGES= +packages="$BASE_PACKAGES $GIT_PACKAGES $UTIL_PACKAGES" + +# echo $packages !!! + +pacman_list $packages "$@" | +grep -v -e '\.[acho]$' -e '\.l[ao]$' -e '/aclocal/' \ + -e '/man/' -e '/pkgconfig/' -e '/emacs/' \ + -e '^/usr/lib/python' -e '^/usr/lib/ruby' \ + -e '^/usr/share/subversion' \ + -e '^/etc/skel/' -e '^/mingw../etc/skel/' \ + -e '^/usr/bin/svn' \ + -e '^/usr/bin/xml.*exe$' \ + -e '^/usr/bin/xslt.*$' \ + -e '^/mingw../share/doc/openssl/' \ + -e '^/mingw../share/doc/gettext/' \ + -e '^/mingw../share/doc/lib' \ + -e '^/mingw../share/doc/pcre2\?/' \ + -e '^/mingw../share/doc/git-doc/.*\.txt$' \ + -e '^/mingw../lib/gettext/' -e '^/mingw../share/gettext/' \ + -e '^/usr/include/' -e '^/mingw../include/' \ + -e '^/usr/share/doc/' \ + -e '^/usr/share/info/' -e '^/mingw../share/info/' \ + -e '^/mingw../share/git-doc/technical/' \ + -e '^/mingw../itcl/' \ + -e '^/mingw../t\(cl\|k\)[^/]*/\(demos\|msgs\|encoding\|tzdata\)/' \ + -e '^/mingw../bin/\(autopoint\|[a-z]*-config\)$' \ + -e '^/mingw../bin/lib\(asprintf\|gettext\|gnutlsxx\|pcre[013-9a-oq-z]\|quadmath\|stdc++\)[^/]*\.dll$' \ + -e '^/mingw../bin/\(asn1\|gnutls\|idn\|mini\|msg\|nettle\|ngettext\|ocsp\|pcre\|rtmp\|xgettext\)[^/]*\.exe$' \ + -e '^/mingw../.*/git-\(remote-testsvn\|shell\)\.exe$' \ + -e '^/mingw../.*/git-cvsserver.*$' \ + -e '^/mingw../.*/gitweb/' \ + -e '^/mingw../lib/tdbc' \ + -e '^/mingw../libexec/git-core/git-archimport$' \ + -e '^/mingw../share/doc/git-doc/git-archimport' \ + -e '^/mingw../libexec/git-core/git-cvsimport$' \ + -e '^/mingw../share/doc/git-doc/git-cvsexport' \ + -e '^/mingw../libexec/git-core/git-cvsexport' \ + -e '^/mingw../share/doc/git-doc/git-cvsimport' \ + -e '^/mingw../share/git\(k\|-gui\)/lib/msgs/' \ + -e '^/mingw../share/nghttp2/' \ + -e '^/usr/bin/msys-\(db\|icu\|gfortran\|stdc++\|quadmath\)[^/]*\.dll$' \ + -e '^/usr/bin/dumper\.exe$' \ + -e '^/usr/share.*/magic$' \ + -e '^/usr/share/perl5/core_perl/Unicode/' \ + -e '^/usr/share/perl5/core_perl/pods/' \ + -e '^/usr/share/perl5/core_perl/Locale/' \ + -e '^/usr/share/perl5/core_perl/Pod/' \ + -e '^/usr/share/perl5/core_perl/ExtUtils/' \ + -e '^/usr/share/perl5/core_perl/CPAN/' \ + -e '^/usr/share/perl5/core_perl/TAP/' \ + -e '^/usr/share/vim/vim74/lang/' \ + -e '^/etc/profile.d/git-sdk.sh$' | +grep -v \ + -e '^/mingw../share/locale/' \ + -e '^/usr/share/locale/' | +grep -v \ + -e '^/cmd/start-.*$' -e '^/cmd/\(git-gui\|gitk\).exe$' \ + -e '^/etc/\(DIR_COLORS\|inputrc\|vimrc\)$' \ + -e '^/etc/profile\.d/\(aliases\|env\|git-prompt\)\.sh$' \ + -e '^/git-\(bash\|cmd\)\.exe$' \ + -e '^/mingw../bin/\(certtool\.exe\|create-shortcut\.exe\)$' \ + -e '^/mingw../bin/\(curl\.exe\|envsubst\.exe\|gettext\.exe\)$' \ + -e '^/mingw../bin/\(gettext\.sh\|gettextize\)$' \ + -e '^/mingw../bin/\(gitk\|git-upload-archive\.exe\)$' \ + -e '^/mingw../bin/lib\(atomic\|charset\)-.*\.dll$' \ + -e '^/mingw../bin/lib\(gcc_s_seh\|gmpxx\)-.*\.dll$' \ + -e '^/mingw../bin/lib\(gomp\|jansson\|minizip\)-.*\.dll$' \ + -e '^/mingw../bin/libvtv.*\.dll$' \ + -e '^/mingw../bin/libpcreposix.*\.dll$' \ + -e '^/mingw../bin/\(.*\.def\|update-ca-trust\)$' \ + -e '^/mingw../bin/\(openssl\|p11tool\|pkcs1-conv\)\.exe$' \ + -e '^/mingw../bin/\(psktool\|recode-.*\|sexp.*\|srp.*\)\.exe$' \ + -e '^/mingw../bin/\(WhoUses\|xmlwf\)\.exe$' \ + -e '^/mingw../etc/pki' -e '^/mingw../lib/p11-kit/' \ + -e '/git-\(add--interactive\|archimport\|citool\|cvs.*\)$' \ + -e '/git-\(difftool.*\|gui.*\|instaweb\|p4\|relink\)$' \ + -e '/git-\(send-email\|svn\)$' \ + -e '/mingw../libexec/git-core/git-\(imap-send\|daemon\)\.exe$' \ + -e '/mingw../libexec/git-core/git-remote-ftp.*\.exe$' \ + -e '/mingw../libexec/git-core/git-http-backend\.exe$' \ + -e "/mingw../libexec/git-core/git-\\($(sed \ + -e 's/^git-//' -e 's/\.exe$//' -e 's/$/\\/' \ + >"$PACKAGE_VERSIONS_FILE" diff --git a/portable-msys2/release.sh b/portable-msys2/release.sh new file mode 100644 index 0000000000..919494f3b8 --- /dev/null +++ b/portable-msys2/release.sh @@ -0,0 +1,154 @@ +#!/bin/sh + +# Build the portable Git for Windows. + +die () { + echo "$*" >&1 + exit 1 +} + +output_directory="$HOME" +include_pdbs= +while test $# -gt 0 +do + case "$1" in + --output) + shift + output_directory="$1" + ;; + --output=*) + output_directory="${1#*=}" + ;; + --include-pdbs) + include_pdbs=t + ;; + -*) + die "Unknown option: $1" + ;; + *) + break + esac + shift +done + +test $# -gt 0 || +die "Usage: $0 [--output=] [optional components]" + +test -d "$output_directory" || +die "Directory inaccessible: '$output_directory'" + +ARCH="$(uname -m)" +case "$ARCH" in +i686) + BITNESS=32 + MD_ARG=128M + ;; +x86_64) + BITNESS=64 + MD_ARG=256M + ;; +*) + die "Unhandled architecture: $ARCH" + ;; +esac +VERSION=$1 +shift +TARGET="$output_directory"/PortableBash-"$VERSION"-"$BITNESS"-bit.7z.exe +OPTS7="-m0=lzma -mx=9 -md=$MD_ARG -mfb=273 -ms=256M " +TMPPACK=/tmp.7z +SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" + +case "$SCRIPT_PATH" in +*" "*) + die "This script cannot handle spaces in $SCRIPT_PATH" + ;; +esac + +echo $SCRIPT_PATH/root + +# Generate a couple of files dynamically + +cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" || +die "Could not copy license file" + +# TODO this is in vc as is root/usr +mkdir -p "$SCRIPT_PATH/root/etc" || +die "Could not make etc/ directory" + +mkdir -p "$SCRIPT_PATH/root/tmp" || +die "Could not make tmp/ directory" + +mkdir -p "$SCRIPT_PATH/root/bin" || +die "Could not make bin/ directory" + +cp /cmd/git.exe "$SCRIPT_PATH/root/bin/git.exe" && +cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/bash.exe" && +cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/sh.exe" || +die "Could not install bin/ redirectors" + +cp "$SCRIPT_PATH/../post-install.bat" "$SCRIPT_PATH/root/" || +die "Could not copy post-install script" + +mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/etc" && +cp /mingw$BITNESS/etc/gitconfig \ + "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" && +git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" \ + credential.helper manager || +die "Could not configure Git-Credential-Manager as default" +test 64 != $BITNESS || +git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" --unset pack.packSizeLimit + +# Make a list of files to include +echo Generating file list +LIST="$(ARCH=$ARCH BITNESS=$BITNESS \ + PACKAGE_VERSIONS_FILE="$SCRIPT_PATH"/root/etc/package-versions.txt \ + sh "$SCRIPT_PATH"/../make-file-list-msys2.sh "$@" | + grep -v "^mingw$BITNESS/etc/gitconfig$")" || +die "Could not generate file list" + +rm -rf "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && +mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && +ln $(echo "$LIST" | sed -n "s|^mingw$BITNESS/bin/[^/]*\.dll$|/&|p") \ + "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core/" || +die "Could not copy .dll files into libexec/git-core/" + +# TODO there are few extra untacked files under /root. Can't figure how they got there +# TODO check for any unwanted pdbs +test -z "$include_pdbs" || { + find "$SCRIPT_PATH/root" -name \*.pdb -exec rm {} \; && + "$SCRIPT_PATH"/../please.sh bundle-pdbs \ + --arch=$ARCH --unpack="$SCRIPT_PATH"/root +} || +die "Could not unpack .pdb files" + +# 7-Zip will strip absolute paths completely... therefore, we can add another +# root directory like this: + +LIST="$LIST $SCRIPT_PATH/root/*" + +# Make the self-extracting package + +type 7za || +pacman -Sy --noconfirm p7zip || +die "Could not install 7-Zip" + +echo "Creating archive" && +(cd / && 7za a $OPTS7 $TMPPACK $LIST) && +(cat "$SCRIPT_PATH/../7-Zip/7zSD.sfx" && + echo ';!@Install@!UTF-8!' && + echo 'Title="Portable MSYS2 for Windows '$BITNESS'-bit"' && + echo 'BeginPrompt="This archive extracts a minimal MSYS2 for Windows '$BITNESS'-bit"' && + echo 'CancelPrompt="Do you want to cancel the portable MSYS2 installation?"' && + echo 'ExtractDialogText="Please, wait..."' && + echo 'ExtractPathText="Where do you want to install portable MSYS2?"' && + echo 'ExtractTitle="Extracting..."' && + echo 'GUIFlags="8+32+64+256+4096"' && + echo 'GUIMode="1"' && + echo 'InstallPath="%%S\\PortableMSYS2"' && + echo 'OverwriteMode="0"' && + echo "RunProgram=\"git-bash.exe --needs-console --hide --no-cd --command=post-install.bat\"" && + echo ';!@InstallEnd@!' && + cat "$TMPPACK") > "$TARGET" && +echo "Success! You will find the new installer at \"$TARGET\"." && +echo "It is a self-extracting .7z archive." && +rm $TMPPACK diff --git a/portable-msys2/root/README.portable b/portable-msys2/root/README.portable new file mode 100644 index 0000000000..7993fd6035 --- /dev/null +++ b/portable-msys2/root/README.portable @@ -0,0 +1,106 @@ +README.portable +======================= + +This version of Git for Windows is portable, i.e. does not need to +be installed. It will run from any directory you place it in, even +from a USB thumbdrive. It will not write permanent entries into the +Windows registry. It does not need administrator privileges to "install". + + +Installation +------------ + +This package is contained in a 7-zip archive with a file name of the form +'PortableGit-.7z.exe'. It is a self-extracting archive: +you can (double-)click it and it will ask for the desired target directory +(which defaults to C:\Program Files\Git). You may change that as needed or +desired. Your user account needs write access to the selected directory. +(You can move that directory with all its contents to a different place or +computer at any time should you later desire so). + +*NOTE*: if you decide to unpack the archive using 7-Zip manually, you must +run the `post-install.bat` script. Git will not run correctly +otherwise. + +Functional differences to the non-portable Git for Windows +---------------------------------------------------------- + +This version does not offer you the convenient right-click context menu +entries "Git GUI Here" and "Git Bash Here", because these would require +to add entries into the Windows registry. + + +Warning +------- + +Since this portable package does not modify any Windows %path% +variables, it is not possible to run the git.exe and gitk.exe files +directly. Start the Git Bash or Git Cmd instead, or add the cmd/ folder +to your %path%. + + +How to start using PortableGit +------------------------------ + +If you are comfortable with a Unix-like shell, just launch 'git-bash.exe'. + +If not, just launch 'git-cmd.exe'. + +Alternatively, you can execute these commands to modify the %path% +variable temporarily: + + set gitdir=c:\portablegit + set path=%gitdir%\cmd;%path% + +Adjust the 'gitdir' according to your setup. As long as you do not +close the command window, you can now simply type "git" or "gitk" to +really call "c:\portablegit\cmd\git.exe" or "c:\portablegit\cmd\gitk.exe". + +By default, git-cmd and git-bash use the directory they were started from as +the working directory when run. You can override this by passing --cd-to-home +to them, which will set the user's home directory as the working directory (as +if Git for Windows was installed). + +In addition, if you set the HOME environment variable (either permanently or +for the current session only) you can make Git store and use the configuration +files in the directory specified in that variable. And if you specify +--cd-to-home, git-bash and git-cmd will use that as the working directory when +launched, too. For example: + + set HOME=%cd%/home + git --cd-to-home +will use the relative directory named home (%cd% specifies the current +directory). + +Quick start +----------- + +Start configuring git with your personal settings: + git config --global user.name "Joe Sixpack" + git config --global user.email joe.sixpack@g_mail.com + +Start using git: + git --help + + +How to change %path% permanently +-------------------------------- + +You may also want to make the modification to the %path% variable a +permanent one. The %path% variable may be changed: + +* either on a System level (for all users in the lower pane), if you are + an Administrator +* or for your own user account only (in the upper pane). + +To change the %path% variable permanently: + +* right-click "My Computer", +* select "Properties", +* open "Advanced", +* click "Environment Variables", +* highlight the "Path" variable, +* click "Edit" (either in upper or in lower pane), +* add your specific path to front of "Variable value" field, separated + by a semicolon from the existing entry. + diff --git a/portable-msys2/root/etc/post-install/13-copy-dlls.post b/portable-msys2/root/etc/post-install/13-copy-dlls.post new file mode 100644 index 0000000000..983d2d86c6 --- /dev/null +++ b/portable-msys2/root/etc/post-install/13-copy-dlls.post @@ -0,0 +1,24 @@ +hardlink_all_dlls () { + exec_path="$(git --exec-path)" || + return + + test ! -e "$exec_path/dlls-copied" || + return + + prefix_path="${exec_path%libexec/git-core}" + ln "$prefix_path/bin/git.exe" "$exec_path/dlls-copied" || { + touch "$exec_path/dlls-copied" + return + } + + if test "a$prefix_path" != "a$exec_path" + then + for dll in "$prefix_path"bin/*.dll + do + ln -f "$dll" "$exec_path" || + echo "ERROR: could not link $dll $exec_path" >&2 + done + fi +} + +hardlink_all_dlls diff --git a/portable-msys2/root/etc/post-install/release-bash.sh b/portable-msys2/root/etc/post-install/release-bash.sh new file mode 100644 index 0000000000..3b390ca1f1 --- /dev/null +++ b/portable-msys2/root/etc/post-install/release-bash.sh @@ -0,0 +1,153 @@ +#!/bin/sh + +# Build the portable Git for Windows. + +die () { + echo "$*" >&1 + exit 1 +} + +output_directory="$HOME" +include_pdbs= +while test $# -gt 0 +do + case "$1" in + --output) + shift + output_directory="$1" + ;; + --output=*) + output_directory="${1#*=}" + ;; + --include-pdbs) + include_pdbs=t + ;; + -*) + die "Unknown option: $1" + ;; + *) + break + esac + shift +done + +test $# -gt 0 || +die "Usage: $0 [--output=] [optional components]" + +test -d "$output_directory" || +die "Directory inaccessible: '$output_directory'" + +ARCH="$(uname -m)" +case "$ARCH" in +i686) + BITNESS=32 + MD_ARG=128M + ;; +x86_64) + BITNESS=64 + MD_ARG=256M + ;; +*) + die "Unhandled architecture: $ARCH" + ;; +esac +VERSION=$1 +shift +TARGET="$output_directory"/PortableBash-"$VERSION"-"$BITNESS"-bit.7z.exe +OPTS7="-m0=lzma -mx=9 -md=$MD_ARG -mfb=273 -ms=256M " +TMPPACK=/tmp.7z +SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" + +case "$SCRIPT_PATH" in +*" "*) + die "This script cannot handle spaces in $SCRIPT_PATH" + ;; +esac + + +# Generate a couple of files dynamically + +cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" || +die "Could not copy license file" + +mkdir -p "$SCRIPT_PATH/root/etc" || +die "Could not make etc/ directory" + +mkdir -p "$SCRIPT_PATH/root/tmp" || +die "Could not make tmp/ directory" + +mkdir -p "$SCRIPT_PATH/root/bin" || +die "Could not make bin/ directory" + +cp /cmd/git.exe "$SCRIPT_PATH/root/bin/git.exe" && +cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/bash.exe" && +cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/sh.exe" || +die "Could not install bin/ redirectors" + +cp "$SCRIPT_PATH/../post-install.bat" "$SCRIPT_PATH/root/" || +die "Could not copy post-install script" + +mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/etc" && +cp /mingw$BITNESS/etc/gitconfig \ + "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" && +git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" \ + credential.helper manager || +die "Could not configure Git-Credential-Manager as default" +test 64 != $BITNESS || +git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" --unset pack.packSizeLimit + +# Make a list of files to include +LIST="$(ARCH=$ARCH BITNESS=$BITNESS \ + PACKAGE_VERSIONS_FILE="$SCRIPT_PATH"/root/etc/package-versions.txt \ + sh "$SCRIPT_PATH"/../make-file-list-bash.sh "$@" "pacman" | + grep -v "^mingw$BITNESS/etc/gitconfig$")" || +die "Could not generate file list" + +rm -rf "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && +mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && +ln $(echo "$LIST" | sed -n "s|^mingw$BITNESS/bin/[^/]*\.dll$|/&|p") \ + "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core/" || +die "Could not copy .dll files into libexec/git-core/" + +test -z "$include_pdbs" || { + find "$SCRIPT_PATH/root" -name \*.pdb -exec rm {} \; && + "$SCRIPT_PATH"/../please.sh bundle-pdbs \ + --arch=$ARCH --unpack="$SCRIPT_PATH"/root +} || +die "Could not unpack .pdb files" + +# 7-Zip will strip absolute paths completely... therefore, we can add another +# root directory like this: + +LIST="var/lib/pacman/sync/* var/lib/pacman/local/*/* etc/pacman*/*" +LIST="$LIST $SCRIPT_PATH/root/*" + +echo $LIST | tr " " "\n" +# exit + +# Make the self-extracting package + +type 7za || +pacman -Sy --noconfirm p7zip || +die "Could not install 7-Zip" + +echo "Creating archive" && +(cd / && 7za a $OPTS7 $TMPPACK $LIST) && +(cat "$SCRIPT_PATH/../7-Zip/7zSD.sfx" && + echo ';!@Install@!UTF-8!' && + echo 'Title="Portable Bash for Windows '$BITNESS'-bit"' && + echo 'BeginPrompt="This archive extracts a complete Git for Windows '$BITNESS'-bit"' && + echo 'CancelPrompt="Do you want to cancel the portable Git installation?"' && + echo 'ExtractDialogText="Please, wait..."' && + echo 'ExtractPathText="Where do you want to install portable Git?"' && + echo 'ExtractTitle="Extracting..."' && + echo 'GUIFlags="8+32+64+256+4096"' && + echo 'GUIMode="1"' && + echo 'InstallPath="%%S\\PortableBash"' && + echo 'OverwriteMode="0"' && + echo "RunProgram=\"git-bash.exe --needs-console --hide --no-cd --command=post-install.bat\"" && + echo ';!@InstallEnd@!' && + cat "$TMPPACK") > "$TARGET" && +echo "Success! You will find the new installer at \"$TARGET\"." && +echo "It is a self-extracting .7z archive." && +rm $TMPPACK diff --git a/portable-msys2/root/usr/share/git/git-for-windows.ico b/portable-msys2/root/usr/share/git/git-for-windows.ico new file mode 100644 index 0000000000000000000000000000000000000000..eadfa5251261307cd87ceb46405d253bd5e7ab90 GIT binary patch literal 107434 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 literal 0 HcmV?d00001 From 2f569bd19972595c95b50afc7ca813d7a73c2281 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Sat, 23 Mar 2019 21:49:30 +0000 Subject: [PATCH 2/5] Update files --- make-file-list-msys2.sh | 103 ++++++++------------------------------ portable-msys2/release.sh | 6 +-- 2 files changed, 23 insertions(+), 86 deletions(-) diff --git a/make-file-list-msys2.sh b/make-file-list-msys2.sh index 3b4db7ee52..4e3afed915 100644 --- a/make-file-list-msys2.sh +++ b/make-file-list-msys2.sh @@ -10,6 +10,14 @@ test -n "$BITNESS" || die "Need ARCH and BITNESS to be set" pacman_list () { +# cat "$this_script_dir/keep-despite-upgrade.txt" 2>/dev/null | +# if test 64 = "$BITNESS" +# then +# grep -v '^mingw32/' +# else +# grep -v '^mingw64/' +# fi + package_list=$(for arg do pactree -u "$arg" @@ -23,6 +31,8 @@ pacman_list () { then pacman -Q $package_list >"$PACKAGE_VERSIONS_FILE" fi && +#echo $package_list +#exit pacman -Ql $package_list | grep -v '/$' | sed 's/^[^ ]* //' @@ -49,21 +59,19 @@ die "Could not determine this script's dir" install_required SH_FOR_REBASE=dash -PACKAGE_EXCLUDES="db info heimdal git util-linux curl git-for-windows-keyring - mingw-w64-p11-kit mingw-w64-bzip2 mingw-w64-c-ares - mingw-w64-libsystre mingw-w64-libtre-git - mingw-w64-tcl mingw-w64-tk mingw-w64-wineditline gdbm icu libdb - libedit libgdbm perl perl-.*" -# TODO following required by filesystem package but is missing -# TODO should we exlude all the tz stuff? -EXTRA_FILE_EXCLUDES="/etc/post-install/05-home-dir.post" BASE_PACKAGES="$(pacman -Qg base | awk '{print $2}' | tr '\n' ' ')" GIT_PACKAGES="mingw-w64-$ARCH-git mingw-w64-$ARCH-git-credential-manager git-extra openssh" UTIL_PACKAGES= packages="$BASE_PACKAGES $GIT_PACKAGES $UTIL_PACKAGES" -# echo $packages !!! +# TODO need this? should be a parameter? Use BITNESS? +PACKAGE_EXCLUDES="db info heimdal git util-linux curl git-for-windows-keyring + mingw-w64-p11-kit filesystem msys2-launcher-git rebase" +# TODO 05-home-dir.post required by filesystem package but is missing from SDK +# TODO should we exlude all the tz stuff? +EXTRA_FILE_EXCLUDES="/etc/post-install/05-home-dir.post + /mingw$BITNESS/libexec/git-core/git-update-git-for-windows" pacman_list $packages "$@" | grep -v -e '\.[acho]$' -e '\.l[ao]$' -e '/aclocal/' \ @@ -117,79 +125,8 @@ grep -v \ -e '^/mingw../share/locale/' \ -e '^/usr/share/locale/' | grep -v \ - -e '^/cmd/start-.*$' -e '^/cmd/\(git-gui\|gitk\).exe$' \ - -e '^/etc/\(DIR_COLORS\|inputrc\|vimrc\)$' \ - -e '^/etc/profile\.d/\(aliases\|env\|git-prompt\)\.sh$' \ - -e '^/git-\(bash\|cmd\)\.exe$' \ - -e '^/mingw../bin/\(certtool\.exe\|create-shortcut\.exe\)$' \ - -e '^/mingw../bin/\(curl\.exe\|envsubst\.exe\|gettext\.exe\)$' \ - -e '^/mingw../bin/\(gettext\.sh\|gettextize\)$' \ - -e '^/mingw../bin/\(gitk\|git-upload-archive\.exe\)$' \ - -e '^/mingw../bin/lib\(atomic\|charset\)-.*\.dll$' \ - -e '^/mingw../bin/lib\(gcc_s_seh\|gmpxx\)-.*\.dll$' \ - -e '^/mingw../bin/lib\(gomp\|jansson\|minizip\)-.*\.dll$' \ - -e '^/mingw../bin/libvtv.*\.dll$' \ - -e '^/mingw../bin/libpcreposix.*\.dll$' \ - -e '^/mingw../bin/\(.*\.def\|update-ca-trust\)$' \ - -e '^/mingw../bin/\(openssl\|p11tool\|pkcs1-conv\)\.exe$' \ - -e '^/mingw../bin/\(psktool\|recode-.*\|sexp.*\|srp.*\)\.exe$' \ - -e '^/mingw../bin/\(WhoUses\|xmlwf\)\.exe$' \ - -e '^/mingw../etc/pki' -e '^/mingw../lib/p11-kit/' \ - -e '/git-\(add--interactive\|archimport\|citool\|cvs.*\)$' \ - -e '/git-\(difftool.*\|gui.*\|instaweb\|p4\|relink\)$' \ - -e '/git-\(send-email\|svn\)$' \ - -e '/mingw../libexec/git-core/git-\(imap-send\|daemon\)\.exe$' \ - -e '/mingw../libexec/git-core/git-remote-ftp.*\.exe$' \ - -e '/mingw../libexec/git-core/git-http-backend\.exe$' \ - -e "/mingw../libexec/git-core/git-\\($(sed \ - -e 's/^git-//' -e 's/\.exe$//' -e 's/$/\\/' \ - >"$PACKAGE_VERSIONS_FILE" diff --git a/portable-msys2/release.sh b/portable-msys2/release.sh index 919494f3b8..0884037c8d 100644 --- a/portable-msys2/release.sh +++ b/portable-msys2/release.sh @@ -53,7 +53,7 @@ x86_64) esac VERSION=$1 shift -TARGET="$output_directory"/PortableBash-"$VERSION"-"$BITNESS"-bit.7z.exe +TARGET="$output_directory"/PortableMSYS2-"$VERSION"-"$BITNESS"-bit.7z.exe OPTS7="-m0=lzma -mx=9 -md=$MD_ARG -mfb=273 -ms=256M " TMPPACK=/tmp.7z SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" @@ -64,8 +64,6 @@ case "$SCRIPT_PATH" in ;; esac -echo $SCRIPT_PATH/root - # Generate a couple of files dynamically cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" || @@ -128,7 +126,7 @@ LIST="$LIST $SCRIPT_PATH/root/*" # Make the self-extracting package -type 7za || +type 7za > /dev/null || pacman -Sy --noconfirm p7zip || die "Could not install 7-Zip" From 0e46faea40eeb16b8669bd0551d97912dde9967d Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Sat, 23 Mar 2019 21:54:44 +0000 Subject: [PATCH 3/5] Cleanup filelist --- make-file-list-msys2.sh | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/make-file-list-msys2.sh b/make-file-list-msys2.sh index 4e3afed915..525d1bca1b 100644 --- a/make-file-list-msys2.sh +++ b/make-file-list-msys2.sh @@ -10,14 +10,6 @@ test -n "$BITNESS" || die "Need ARCH and BITNESS to be set" pacman_list () { -# cat "$this_script_dir/keep-despite-upgrade.txt" 2>/dev/null | -# if test 64 = "$BITNESS" -# then -# grep -v '^mingw32/' -# else -# grep -v '^mingw64/' -# fi - package_list=$(for arg do pactree -u "$arg" @@ -31,8 +23,6 @@ pacman_list () { then pacman -Q $package_list >"$PACKAGE_VERSIONS_FILE" fi && -#echo $package_list -#exit pacman -Ql $package_list | grep -v '/$' | sed 's/^[^ ]* //' @@ -134,6 +124,5 @@ sed 's/^\///' # TODO - need this? test -z "$PACKAGE_VERSIONS_FILE" || pacman -Q filesystem $SH_FOR_REBASE rebase \ - $(test -n "$MINIMAL_GIT" || echo util-linux unzip \ - mingw-w64-$ARCH-xpdf-tools) \ + util-linux unzip mingw-w64-$ARCH-xpdf-tools \ >>"$PACKAGE_VERSIONS_FILE" From 299af20386f7a151ae98f27ddf76ec0ca7792381 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Sat, 23 Mar 2019 22:05:10 +0000 Subject: [PATCH 4/5] Semi random commit so can sigh CLA Signed-off-by: Steve Lee steve@opendirective.com --- portable-msys2/release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portable-msys2/release.sh b/portable-msys2/release.sh index 0884037c8d..0fdabd4c55 100644 --- a/portable-msys2/release.sh +++ b/portable-msys2/release.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Build the portable Git for Windows. +# Build the portable MSYS2 die () { echo "$*" >&1 From 49ff1f093130d84a16efc7928743432968b8f431 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Mon, 25 Mar 2019 16:48:59 +0000 Subject: [PATCH 5/5] Remove unwanted scripted dupe --- .../root/etc/post-install/release-bash.sh | 153 ------------------ 1 file changed, 153 deletions(-) delete mode 100644 portable-msys2/root/etc/post-install/release-bash.sh diff --git a/portable-msys2/root/etc/post-install/release-bash.sh b/portable-msys2/root/etc/post-install/release-bash.sh deleted file mode 100644 index 3b390ca1f1..0000000000 --- a/portable-msys2/root/etc/post-install/release-bash.sh +++ /dev/null @@ -1,153 +0,0 @@ -#!/bin/sh - -# Build the portable Git for Windows. - -die () { - echo "$*" >&1 - exit 1 -} - -output_directory="$HOME" -include_pdbs= -while test $# -gt 0 -do - case "$1" in - --output) - shift - output_directory="$1" - ;; - --output=*) - output_directory="${1#*=}" - ;; - --include-pdbs) - include_pdbs=t - ;; - -*) - die "Unknown option: $1" - ;; - *) - break - esac - shift -done - -test $# -gt 0 || -die "Usage: $0 [--output=] [optional components]" - -test -d "$output_directory" || -die "Directory inaccessible: '$output_directory'" - -ARCH="$(uname -m)" -case "$ARCH" in -i686) - BITNESS=32 - MD_ARG=128M - ;; -x86_64) - BITNESS=64 - MD_ARG=256M - ;; -*) - die "Unhandled architecture: $ARCH" - ;; -esac -VERSION=$1 -shift -TARGET="$output_directory"/PortableBash-"$VERSION"-"$BITNESS"-bit.7z.exe -OPTS7="-m0=lzma -mx=9 -md=$MD_ARG -mfb=273 -ms=256M " -TMPPACK=/tmp.7z -SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" - -case "$SCRIPT_PATH" in -*" "*) - die "This script cannot handle spaces in $SCRIPT_PATH" - ;; -esac - - -# Generate a couple of files dynamically - -cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" || -die "Could not copy license file" - -mkdir -p "$SCRIPT_PATH/root/etc" || -die "Could not make etc/ directory" - -mkdir -p "$SCRIPT_PATH/root/tmp" || -die "Could not make tmp/ directory" - -mkdir -p "$SCRIPT_PATH/root/bin" || -die "Could not make bin/ directory" - -cp /cmd/git.exe "$SCRIPT_PATH/root/bin/git.exe" && -cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/bash.exe" && -cp /mingw$BITNESS/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/sh.exe" || -die "Could not install bin/ redirectors" - -cp "$SCRIPT_PATH/../post-install.bat" "$SCRIPT_PATH/root/" || -die "Could not copy post-install script" - -mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/etc" && -cp /mingw$BITNESS/etc/gitconfig \ - "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" && -git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" \ - credential.helper manager || -die "Could not configure Git-Credential-Manager as default" -test 64 != $BITNESS || -git config -f "$SCRIPT_PATH/root/mingw$BITNESS/etc/gitconfig" --unset pack.packSizeLimit - -# Make a list of files to include -LIST="$(ARCH=$ARCH BITNESS=$BITNESS \ - PACKAGE_VERSIONS_FILE="$SCRIPT_PATH"/root/etc/package-versions.txt \ - sh "$SCRIPT_PATH"/../make-file-list-bash.sh "$@" "pacman" | - grep -v "^mingw$BITNESS/etc/gitconfig$")" || -die "Could not generate file list" - -rm -rf "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && -mkdir -p "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core" && -ln $(echo "$LIST" | sed -n "s|^mingw$BITNESS/bin/[^/]*\.dll$|/&|p") \ - "$SCRIPT_PATH/root/mingw$BITNESS/libexec/git-core/" || -die "Could not copy .dll files into libexec/git-core/" - -test -z "$include_pdbs" || { - find "$SCRIPT_PATH/root" -name \*.pdb -exec rm {} \; && - "$SCRIPT_PATH"/../please.sh bundle-pdbs \ - --arch=$ARCH --unpack="$SCRIPT_PATH"/root -} || -die "Could not unpack .pdb files" - -# 7-Zip will strip absolute paths completely... therefore, we can add another -# root directory like this: - -LIST="var/lib/pacman/sync/* var/lib/pacman/local/*/* etc/pacman*/*" -LIST="$LIST $SCRIPT_PATH/root/*" - -echo $LIST | tr " " "\n" -# exit - -# Make the self-extracting package - -type 7za || -pacman -Sy --noconfirm p7zip || -die "Could not install 7-Zip" - -echo "Creating archive" && -(cd / && 7za a $OPTS7 $TMPPACK $LIST) && -(cat "$SCRIPT_PATH/../7-Zip/7zSD.sfx" && - echo ';!@Install@!UTF-8!' && - echo 'Title="Portable Bash for Windows '$BITNESS'-bit"' && - echo 'BeginPrompt="This archive extracts a complete Git for Windows '$BITNESS'-bit"' && - echo 'CancelPrompt="Do you want to cancel the portable Git installation?"' && - echo 'ExtractDialogText="Please, wait..."' && - echo 'ExtractPathText="Where do you want to install portable Git?"' && - echo 'ExtractTitle="Extracting..."' && - echo 'GUIFlags="8+32+64+256+4096"' && - echo 'GUIMode="1"' && - echo 'InstallPath="%%S\\PortableBash"' && - echo 'OverwriteMode="0"' && - echo "RunProgram=\"git-bash.exe --needs-console --hide --no-cd --command=post-install.bat\"" && - echo ';!@InstallEnd@!' && - cat "$TMPPACK") > "$TARGET" && -echo "Success! You will find the new installer at \"$TARGET\"." && -echo "It is a self-extracting .7z archive." && -rm $TMPPACK