diff --git a/.gitignore b/.gitignore index 10c273c2bc..2093b0809b 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ edit-git-bash.exe /msi/obj/ /msi/package-versions.txt /msi/wix40-binaries.zip +/msix/root/ /nuget/GitForWindows.nuspec /nuget/Git-Windows-Minimal.nuspec /nuget/Git-Windows-Minimal.nuspec.unmoved diff --git a/msix/Assets/LockScreenLogo.png b/msix/Assets/LockScreenLogo.png new file mode 100644 index 0000000000..fa651cf598 Binary files /dev/null and b/msix/Assets/LockScreenLogo.png differ diff --git a/msix/Assets/LockScreenLogo.scale-200.png b/msix/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000..b5c5143899 Binary files /dev/null and b/msix/Assets/LockScreenLogo.scale-200.png differ diff --git a/msix/Assets/Square150x150Logo.png b/msix/Assets/Square150x150Logo.png new file mode 100644 index 0000000000..40836ed942 Binary files /dev/null and b/msix/Assets/Square150x150Logo.png differ diff --git a/msix/Assets/Square150x150Logo.scale-200.png b/msix/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000..defdd4ac14 Binary files /dev/null and b/msix/Assets/Square150x150Logo.scale-200.png differ diff --git a/msix/Assets/Square44x44Logo.png b/msix/Assets/Square44x44Logo.png new file mode 100644 index 0000000000..b5c5143899 Binary files /dev/null and b/msix/Assets/Square44x44Logo.png differ diff --git a/msix/Assets/Square44x44Logo.scale-200.png b/msix/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000..1632fc6333 Binary files /dev/null and b/msix/Assets/Square44x44Logo.scale-200.png differ diff --git a/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000..fa651cf598 Binary files /dev/null and b/msix/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/msix/Assets/StoreLogo.png b/msix/Assets/StoreLogo.png new file mode 100644 index 0000000000..b5c5143899 Binary files /dev/null and b/msix/Assets/StoreLogo.png differ diff --git a/msix/appxmanifest.xml.in b/msix/appxmanifest.xml.in new file mode 100644 index 0000000000..c86012ed28 --- /dev/null +++ b/msix/appxmanifest.xml.in @@ -0,0 +1,161 @@ + + + + + + + Git for Windows + The Git Development Community + Assets\StoreLogo.png + Git for Windows focuses on offering a lightweight, native set of tools that bring the full feature set of the Git to Windows while providing appropriate user interfaces for experienced users. + disabled + disabled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/msix/release.sh b/msix/release.sh new file mode 100644 index 0000000000..ac501b6c95 --- /dev/null +++ b/msix/release.sh @@ -0,0 +1,187 @@ +#!/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'" + +case "$MSYSTEM" in +MINGW32) + BITNESS=32 + ARCH=i686 + ARTIFACT_SUFFIX="x86" + MD_ARG=128M + MINGW_PREFIX=mingw-w64-i686- + ;; +MINGW64) + BITNESS=64 + ARCH=x86_64 + ARTIFACT_SUFFIX="x64" + MD_ARG=256M + MINGW_PREFIX=mingw-w64-x86_64- + ;; +CLANGARM64) + BITNESS=64 + ARCH=aarch64 + ARTIFACT_SUFFIX=arm64 + MD_ARG=256M + MINGW_PREFIX=mingw-w64-clang-aarch64- + ;; +*) + die "Unhandled MSYSTEM: $MSYSTEM" + ;; +esac +MSYSTEM_LOWER=${MSYSTEM,,} +VERSION=$1 +shift +TARGET="$output_directory"/Git.GitforWindows_"$VERSION"_"$ARTIFACT_SUFFIX".msix +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 + +mkdir -p "$SCRIPT_PATH/root/" || +die "Could not make root" + +cp "$SCRIPT_PATH/../LICENSE.txt" "$SCRIPT_PATH/root/" || +die "Could not copy license file" + +mkdir -p "$SCRIPT_PATH/root/dev/mqueue" || +die "Could not make /dev/mqueue directory" + +mkdir -p "$SCRIPT_PATH/root/dev/shm" || +die "Could not make /dev/shm/ directory" + +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 /$MSYSTEM_LOWER/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/bash.exe" && +cp /$MSYSTEM_LOWER/share/git/compat-bash.exe "$SCRIPT_PATH/root/bin/sh.exe" || +die "Could not install bin/ redirectors" + +etc_gitconfig="$(git -c core.editor=echo config --system -e 2>/dev/null)" && +etc_gitconfig="$(cygpath -au "$etc_gitconfig")" && +etc_gitconfig="${etc_gitconfig#/}" || +die "Could not determine the path of the system config" + +# Make a list of files to include +LIST="$(ARCH=$ARCH ETC_GITCONFIG="$etc_gitconfig" \ + PACKAGE_VERSIONS_FILE="$SCRIPT_PATH"/root/etc/package-versions.txt \ + sh "$SCRIPT_PATH"/../make-file-list.sh "$@" | + grep -v "^$etc_gitconfig$")" || +die "Could not generate file list" + +mkdir -p "$SCRIPT_PATH/root/${etc_gitconfig%/*}" && +cp /"$etc_gitconfig" "$SCRIPT_PATH/root/$etc_gitconfig" && +git config -f "$SCRIPT_PATH/root/$etc_gitconfig" \ + credential.helper manager || +die "Could not configure Git-Credential-Manager as default" +test 64 != $BITNESS || +git config -f "$SCRIPT_PATH/root/$etc_gitconfig" --unset pack.packSizeLimit +git config -f "$SCRIPT_PATH/root/$etc_gitconfig" core.fscache true + +case "$LIST" in +*/git-credential-helper-selector.exe*) + git config -f "$SCRIPT_PATH/root/$etc_gitconfig" \ + credential.helper helper-selector + ;; +esac + +git_core="$SCRIPT_PATH/root/$MSYSTEM_LOWER/libexec/git-core" && +rm -rf "$git_core" && +mkdir -p "$git_core" && +if test "$(stat -c %D /$MSYSTEM_LOWER/bin)" = "$(stat -c %D "$git_core")" +then + ln_or_cp=ln +else + ln_or_cp=cp +fi && +$ln_or_cp $(echo "$LIST" | sed -n "s|^$MSYSTEM_LOWER/bin/[^/]*\.dll$|/&|p") "$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" + +# Install Tooling +echo "Install WinApp CLI" +winget install Microsoft.WinAppCLI --accept-source-agreements --accept-package-agreements --disable-interactivity || +die "Failed to install WinApp CLI" + +# Create MSIX + +MAPFILE=$SCRIPT_PATH/root/files.map +MANIFESTIN=$SCRIPT_PATH/appxmanifest.xml.in +MANIFESTOUT=$SCRIPT_PATH/root/appxmanifest.xml + +echo "Create MSIX" + +sed -e "s/@@VERSION@@/$VERSION/g" <"$MANIFESTIN" >"$MANIFESTOUT" + +echo "[Files]" >"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/appxmanifest.xml\" \"AppxManifest.xml\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/git.exe\" \"bin/git.exe\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/sh.exe\" \"bin/sh.exe\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/root/bin/bash.exe\" \"bin/bash.exe\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/LockScreenLogo.png\" \"Assets/LockScreenLogo.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/LockScreenLogo.scale-200.png\" \"Assets/LockScreenLogo.scale-200.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square150x150Logo.png\" \"Assets/Square150x150Logo.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square150x150Logo.scale-200.png\" \"Assets/Square150x150Logo.scale-200.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.png\" \"Assets/Square44x44Logo.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.scale-200.png\" \"Assets/Square44x44Logo.scale-200.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/Square44x44Logo.targetsize-24_altform-unplated.png\" \"Assets/Square44x44Logo.targetsize-24_altform-unplated.png\"" >>"$MAPFILE" && +echo "\"$(cygpath -aw "$SCRIPT_PATH")/Assets/StoreLogo.png\" \"Assets/StoreLogo.png\"" >>"$MAPFILE" && +echo "$LIST" | +sed -e 'y/\//\\/' -e 's/.*/"&" "&"/' >>"$MAPFILE" + +PWSH_COMMAND="winapp tool makeappx.exe pack /v /o /f $(cygpath -aw "$MAPFILE") /p $(cygpath -aw "$TARGET")" +powershell -WorkingDirectory "$(cygpath -aw "/")" -NonInteractive -NoProfile -NoLogo -Command "iex '$PWSH_COMMAND'" && +echo "Package created at $TARGET" \ No newline at end of file