diff --git a/.git-lfs.metadata b/.git-lfs.metadata index 0cad248..1eae6b2 100644 --- a/.git-lfs.metadata +++ b/.git-lfs.metadata @@ -1,2 +1 @@ -e76897da8f89170b2e23db7723408a7bdd038ee8 SOURCES/git-lfs-v3.4.1.tar.gz -8f640c97e9736385e8cad79c91c983de895d6053 SOURCES/manpages.tgz +771dcd1c97f61e93a8f362a7d5082469ac52a3bf SOURCES/git-lfs-v3.6.1.tar.gz diff --git a/.gitignore b/.gitignore index 6643cd6..d8e1fcf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -SOURCES/git-lfs-v3.4.1.tar.gz -SOURCES/manpages.tgz +SOURCES/git-lfs-v3.6.1.tar.gz diff --git a/SOURCES/README.Fedora b/SOURCES/README.Fedora new file mode 100644 index 0000000..3bfd4d0 --- /dev/null +++ b/SOURCES/README.Fedora @@ -0,0 +1,11 @@ +git-lfs on Fedora +================= + +By default, the package will run a post-install/post-uninstall task to +enable/disable git-lfs filters in the system git configuration. + +If you wish to enable/disable git-lfs manually, you can set the following +option in the system git config, and package install/uninstall will no longer +do this: + +# git config --system 'fedora.git-lfs.no-modify-config' true diff --git a/SOURCES/gen-manpages.sh b/SOURCES/gen-manpages.sh deleted file mode 100644 index 057506e..0000000 --- a/SOURCES/gen-manpages.sh +++ /dev/null @@ -1,15 +0,0 @@ -# As `asciidoctor` package has not been packaged to RHEL 8: - -# Pass package version(eg. `3.4.0`) as argument - -VERSION=$1 - -cd git-lfs-$VERSION - -make man GIT_LFS_SHA=unused VERSION=unused PREFIX=unused -rm -r man/html - -tar -czvf manpages.tgz man/* - -cp manpages.tgz ../ - diff --git a/SOURCES/git-lfs-3.4.1-cve-2024-53263.patch b/SOURCES/git-lfs-3.4.1-cve-2024-53263.patch deleted file mode 100644 index 773e8bb..0000000 --- a/SOURCES/git-lfs-3.4.1-cve-2024-53263.patch +++ /dev/null @@ -1,358 +0,0 @@ -diff -urN b/creds/creds.go a/creds/creds.go ---- b/creds/creds.go 2023-12-13 19:56:25.000000000 +0100 -+++ a/creds/creds.go 2025-01-17 08:55:10.175959181 +0100 -@@ -53,11 +53,20 @@ - // as input. - type Creds map[string][]string - --func bufferCreds(c Creds) *bytes.Buffer { -+func (c Creds) buffer(protectProtocol bool) (*bytes.Buffer, error) { - buf := new(bytes.Buffer) - - for k, v := range c { - for _, item := range v { -+ if strings.Contains(item, "\n") { -+ return nil, errors.Errorf(tr.Tr.Get("credential value for %s contains newline: %q", k, item)) -+ } -+ if protectProtocol && strings.Contains(item, "\r") { -+ return nil, errors.Errorf(tr.Tr.Get("credential value for %s contains carriage return: %q\nIf this is intended, set `credential.protectProtocol=false`", k, item)) -+ } -+ if strings.Contains(item, string(rune(0))) { -+ return nil, errors.Errorf(tr.Tr.Get("credential value for %s contains null byte: %q", k, item)) -+ } - buf.Write([]byte(k)) - buf.Write([]byte("=")) - buf.Write([]byte(item)) -@@ -65,7 +74,7 @@ - } - } - -- return buf -+ return buf, nil - } - - type CredentialHelperContext struct { -@@ -153,6 +162,9 @@ - helpers = append(helpers, ctxt.askpassCredHelper) - } - } -+ -+ ctxt.commandCredHelper.protectProtocol = ctxt.urlConfig.Bool("credential", rawurl, "protectProtocol", true) -+ - return CredentialHelperWrapper{CredentialHelper: NewCredentialHelpers(append(helpers, ctxt.commandCredHelper)), Input: input, Url: u} - } - -@@ -292,7 +304,8 @@ - } - - type commandCredentialHelper struct { -- SkipPrompt bool -+ SkipPrompt bool -+ protectProtocol bool - } - - func (h *commandCredentialHelper) Fill(creds Creds) (Creds, error) { -@@ -323,7 +336,10 @@ - if err != nil { - return nil, errors.New(tr.Tr.Get("failed to find `git credential %s`: %v", subcommand, err)) - } -- cmd.Stdin = bufferCreds(input) -+ cmd.Stdin, err = input.buffer(h.protectProtocol) -+ if err != nil { -+ return nil, errors.New(tr.Tr.Get("invalid input to `git credential %s`: %v", subcommand, err)) -+ } - cmd.Stdout = output - /* - There is a reason we don't read from stderr here: -diff -urN b/creds/creds_test.go a/creds/creds_test.go ---- b/creds/creds_test.go 2023-12-13 19:56:25.000000000 +0100 -+++ a/creds/creds_test.go 2025-01-17 08:55:21.318023782 +0100 -@@ -1,12 +1,89 @@ - package creds - - import ( -+ "bytes" - "errors" -+ "slices" -+ "strings" - "testing" - - "github.com/stretchr/testify/assert" - ) - -+func assertCredsLinesMatch(t *testing.T, expected []string, buf *bytes.Buffer) { -+ actual := strings.SplitAfter(buf.String(), "\n") -+ -+ slices.Sort(expected) -+ slices.Sort(actual) -+ -+ assert.Equal(t, expected, actual) -+} -+func TestCredsBufferFormat(t *testing.T) { -+ creds := make(Creds) -+ -+ expected := []string{""} -+ -+ buf, err := creds.buffer(true) -+ assert.NoError(t, err) -+ assertCredsLinesMatch(t, expected, buf) -+ -+ creds["protocol"] = []string{"https"} -+ creds["host"] = []string{"example.com"} -+ -+ expected = []string{"host=example.com\n", "protocol=https\n", ""} -+ -+ buf, err = creds.buffer(true) -+ assert.NoError(t, err) -+ assertCredsLinesMatch(t, expected, buf) -+ -+ creds["wwwauth[]"] = []string{"Basic realm=test", "Negotiate"} -+ -+ expected = append(expected, "wwwauth[]=Basic realm=test\n", "wwwauth[]=Negotiate\n") -+ buf, err = creds.buffer(true) -+ assert.NoError(t, err) -+ assertCredsLinesMatch(t, expected, buf) -+} -+ -+func TestCredsBufferProtect(t *testing.T) { -+ creds := make(Creds) -+ -+ // Always disallow LF characters -+ creds["protocol"] = []string{"https"} -+ creds["host"] = []string{"one.example.com\nhost=two.example.com"} -+ -+ buf, err := creds.buffer(false) -+ assert.Error(t, err) -+ assert.Nil(t, buf) -+ -+ buf, err = creds.buffer(true) -+ assert.Error(t, err) -+ assert.Nil(t, buf) -+ -+ // Disallow CR characters unless protocol protection disabled -+ creds["host"] = []string{"one.example.com\rhost=two.example.com"} -+ -+ expected := []string{"", "protocol=https\n", "host=one.example.com\rhost=two.example.com\n"} -+ -+ buf, err = creds.buffer(false) -+ assert.NoError(t, err) -+ assertCredsLinesMatch(t, expected, buf) -+ -+ buf, err = creds.buffer(true) -+ assert.Error(t, err) -+ assert.Nil(t, buf) -+ -+ // Always disallow null bytes -+ creds["host"] = []string{"one.example.com\x00host=two.example.com"} -+ -+ buf, err = creds.buffer(false) -+ assert.Error(t, err) -+ assert.Nil(t, buf) -+ -+ buf, err = creds.buffer(true) -+ assert.Error(t, err) -+ assert.Nil(t, buf) -+} -+ - type testCredHelper struct { - fillErr error - approveErr error -diff -urN b/t/cmd/lfstest-gitserver.go a/t/cmd/lfstest-gitserver.go ---- b/t/cmd/lfstest-gitserver.go 2023-12-13 19:56:25.000000000 +0100 -+++ a/t/cmd/lfstest-gitserver.go 2025-01-16 14:33:23.825991696 +0100 -@@ -27,6 +27,7 @@ - "net/http" - "net/http/httptest" - "net/textproto" -+ "net/url" - "os" - "os/exec" - "regexp" -@@ -252,6 +253,7 @@ - } - - func lfsUrl(repo, oid string, redirect bool) string { -+ repo = url.QueryEscape(repo) - if redirect { - return server.URL + "/redirect307/objects/" + oid + "?r=" + repo - } -diff -urN b/t/t-credentials-protect.sh a/t/t-credentials-protect.sh ---- b/t/t-credentials-protect.sh 1970-01-01 01:00:00.000000000 +0100 -+++ a/t/t-credentials-protect.sh 2025-01-16 14:03:23.597029590 +0100 -@@ -0,0 +1,146 @@ -+#!/usr/bin/env bash -+ -+. "$(dirname "$0")/testlib.sh" -+ -+ensure_git_version_isnt $VERSION_LOWER "2.3.0" -+ -+export CREDSDIR="$REMOTEDIR/creds-credentials-protect" -+setup_creds -+ -+# Copy the default record file for the test credential helper to match the -+# hostname used in the Git LFS configurations of the tests. -+cp "$CREDSDIR/127.0.0.1" "$CREDSDIR/localhost" -+ -+begin_test "credentials rejected with line feed" -+( -+ set -e -+ -+ reponame="protect-linefeed" -+ setup_remote_repo "$reponame" -+ clone_repo "$reponame" "$reponame" -+ -+ contents="a" -+ contents_oid=$(calc_oid "$contents") -+ -+ git lfs track "*.dat" -+ printf "%s" "$contents" >a.dat -+ git add .gitattributes a.dat -+ git commit -m "add a.dat" -+ -+ # Using localhost instead of 127.0.0.1 in the LFS API URL ensures this URL -+ # is used when filling credentials rather than the Git remote URL, which -+ # would otherwise be used since it would have the same scheme and hostname. -+ gitserver="$(echo "$GITSERVER" | sed 's/127\.0\.0\.1/localhost/')" -+ testreponame="test%0a$reponame" -+ git config lfs.url "$gitserver/$testreponame.git/info/lfs" -+ -+ GIT_TRACE=1 git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -eq "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to fail ..." -+ exit 1 -+ fi -+ grep "batch response: Git credentials for $gitserver.* not found" push.log -+ grep "credential value for path contains newline" push.log -+ refute_server_object "$testreponame" "$contents_oid" -+ -+ git config credential.protectProtocol false -+ -+ GIT_TRACE=1 git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -eq "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to fail ..." -+ exit 1 -+ fi -+ grep "batch response: Git credentials for $gitserver.* not found" push.log -+ grep "credential value for path contains newline" push.log -+ refute_server_object "$testreponame" "$contents_oid" -+) -+end_test -+ -+begin_test "credentials rejected with carriage return" -+( -+ set -e -+ -+ reponame="protect-return" -+ setup_remote_repo "$reponame" -+ clone_repo "$reponame" "$reponame" -+ -+ contents="a" -+ contents_oid=$(calc_oid "$contents") -+ -+ git lfs track "*.dat" -+ printf "%s" "$contents" >a.dat -+ git add .gitattributes a.dat -+ git commit -m "add a.dat" -+ -+ # Using localhost instead of 127.0.0.1 in the LFS API URL ensures this URL -+ # is used when filling credentials rather than the Git remote URL, which -+ # would otherwise be used since it would have the same scheme and hostname. -+ gitserver="$(echo "$GITSERVER" | sed 's/127\.0\.0\.1/localhost/')" -+ testreponame="test%0d$reponame" -+ git config lfs.url "$gitserver/$testreponame.git/info/lfs" -+ -+ GIT_TRACE=1 git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -eq "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to fail ..." -+ exit 1 -+ fi -+ grep "batch response: Git credentials for $gitserver.* not found" push.log -+ grep "credential value for path contains carriage return" push.log -+ refute_server_object "$testreponame" "$contents_oid" -+ -+ git config credential.protectProtocol false -+ -+ git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -ne "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to succeed ..." -+ exit 1 -+ fi -+ [ $(grep -c "Uploading LFS objects: 100% (1/1)" push.log) -eq 1 ] -+ assert_server_object "$testreponame" "$contents_oid" -+) -+end_test -+ -+begin_test "credentials rejected with null byte" -+( -+ set -e -+ -+ reponame="protect-null" -+ setup_remote_repo "$reponame" -+ clone_repo "$reponame" "$reponame" -+ -+ contents="a" -+ contents_oid=$(calc_oid "$contents") -+ -+ git lfs track "*.dat" -+ printf "%s" "$contents" >a.dat -+ git add .gitattributes a.dat -+ git commit -m "add a.dat" -+ -+ # Using localhost instead of 127.0.0.1 in the LFS API URL ensures this URL -+ # is used when filling credentials rather than the Git remote URL, which -+ # would otherwise be used since it would have the same scheme and hostname. -+ gitserver="$(echo "$GITSERVER" | sed 's/127\.0\.0\.1/localhost/')" -+ testreponame="test%00$reponame" -+ git config lfs.url "$gitserver/$testreponame.git/info/lfs" -+ -+ GIT_TRACE=1 git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -eq "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to fail ..." -+ exit 1 -+ fi -+ grep "batch response: Git credentials for $gitserver.* not found" push.log -+ grep "credential value for path contains null byte" push.log -+ refute_server_object "$testreponame" "$contents_oid" -+ -+ git config credential.protectProtocol false -+ -+ GIT_TRACE=1 git lfs push origin main 2>&1 | tee push.log -+ if [ "0" -eq "${PIPESTATUS[0]}" ]; then -+ echo >&2 "fatal: expected 'git lfs push' to fail ..." -+ exit 1 -+ fi -+ grep "batch response: Git credentials for $gitserver.* not found" push.log -+ grep "credential value for path contains null byte" push.log -+ refute_server_object "$testreponame" "$contents_oid" -+) -+end_test -diff -urN b/t/testhelpers.sh a/t/testhelpers.sh ---- b/t/testhelpers.sh 2023-12-13 19:56:25.000000000 +0100 -+++ a/t/testhelpers.sh 2025-01-16 14:15:19.240279305 +0100 -@@ -557,6 +557,14 @@ - fi - } - -+ -+setup_creds() { -+ mkdir -p "$CREDSDIR" -+ write_creds_file "user:pass" "$CREDSDIR/127.0.0.1" -+ write_creds_file ":pass" "$CREDSDIR/--$certpath" -+ write_creds_file ":pass" "$CREDSDIR/--$keypath" -+} -+ - # setup initializes the clean, isolated environment for integration tests. - setup() { - cd "$ROOTDIR" -@@ -613,10 +621,7 @@ - # setup the git credential password storage - local certpath="$(echo "$LFS_CLIENT_CERT_FILE" | tr / -)" - local keypath="$(echo "$LFS_CLIENT_KEY_FILE_ENCRYPTED" | tr / -)" -- mkdir -p "$CREDSDIR" -- write_creds_file "user:pass" "$CREDSDIR/127.0.0.1" -- write_creds_file ":pass" "$CREDSDIR/--$certpath" -- write_creds_file ":pass" "$CREDSDIR/--$keypath" -+ setup_creds - - echo "#" - echo "# HOME: $HOME" diff --git a/SPECS/git-lfs.spec b/SPECS/git-lfs.spec index 1caf499..178e2eb 100644 --- a/SPECS/git-lfs.spec +++ b/SPECS/git-lfs.spec @@ -1,39 +1,40 @@ -# Build man pages -%global with_manpages 1 +## START: Set by rpmautospec +## (rpmautospec version 0.6.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 2; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec -%bcond_without check +%bcond check 1 # https://github.com/git-lfs/git-lfs -%global goipath github.com/git-lfs/git-lfs -Version: 3.4.1 +%global goipath github.com/git-lfs/git-lfs/v3 +Version: 3.6.1 -# golang doesn't ship i686 binaries, we don't need the build -# https://bugzilla.redhat.com/show_bug.cgi?id=1752991#c9 -%global golang_arches %(echo %{golang_arches} | sed "s|%{ix86}||") %gometa %global gobuilddir %{_builddir}/%{name}-%{version}/_build -# define gobuild macro to not lose hardening, because of macro conflict -# https://bugzilla.redhat.com/show_bug.cgi?id=1919348 -%global gobuild CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-all" go build -compiler gc -buildmode pie '-tags=rpm_crashtraceback libtrust_openssl ' -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'" -a -v -x %{?**} +%global common_description %{expand: +Git extension for versioning large files.} + +%global golicenses LICENSE.md +%global godocs docs CHANGELOG.md CODE-OF-CONDUCT.md\\\ + CONTRIBUTING.md README.md Name: git-lfs -Release: 5%{?dist} +Release: %autorelease Summary: Git extension for versioning large files -License: MIT +# See LICENSE.md for details. +License: MIT AND BSD-3-Clause URL: https://git-lfs.github.io/ Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-v%{version}.tar.gz -Source1: manpages.tgz -# See this script. Generating of manpages is performed on other distros due to some missing rubygem-asciidoctor on RHEL-8 -Source2: gen-manpages.sh +Source1: README.Fedora -# https://github.com/advisories/GHSA-q6r2-x2cc-vrp7 -# Backports 268628b, 4423696, 0345b6f and f6904cc that resolves the CVE-2024-53263 -# Aditionally backports b326b63 -# Commits had to be adapted as git-lfs-3.4.1 doesn't support multistage authentication -Patch: git-lfs-3.4.1-cve-2024-53263.patch # Generated provides by vendor2provides.py # https://src.fedoraproject.org/rpms/syncthing/blob/603e4e03a92a7d704d199629dd85304018e8279d/f/vendor2provides.py @@ -46,36 +47,40 @@ Provides: bundled(golang(github.com/git-lfs/go-netrc)) = f0c862d Provides: bundled(golang(github.com/git-lfs/pktline)) = 06e9096 Provides: bundled(golang(github.com/git-lfs/wildmatch/v2)) = 2.0.1 Provides: bundled(golang(github.com/hashicorp/go-uuid)) = 1.0.2 -Provides: bundled(golang(github.com/inconshreveable/mousetrap)) = 1.0.1 +Provides: bundled(golang(github.com/inconshreveable/mousetrap)) = 1.1.0 Provides: bundled(golang(github.com/jcmturner/aescts/v2)) = 2.0.0 Provides: bundled(golang(github.com/jcmturner/dnsutils/v2)) = 2.0.0 Provides: bundled(golang(github.com/jcmturner/gofork)) = 1.0.0 Provides: bundled(golang(github.com/jcmturner/goidentity/v6)) = 6.0.1 Provides: bundled(golang(github.com/jcmturner/gokrb5/v8)) = 8.4.2 Provides: bundled(golang(github.com/jcmturner/rpc/v2)) = 2.0.3 +Provides: bundled(golang(github.com/jmhodges/clock)) = 1.2.0 Provides: bundled(golang(github.com/leonelquinteros/gotext)) = 1.5.0 Provides: bundled(golang(github.com/mattn/go-isatty)) = 0.0.4 Provides: bundled(golang(github.com/olekukonko/ts)) = 78ecb04 Provides: bundled(golang(github.com/pkg/errors)) = c605e28 Provides: bundled(golang(github.com/pmezard/go-difflib)) = 1.0.0 Provides: bundled(golang(github.com/rubyist/tracerx)) = 7879593 -Provides: bundled(golang(github.com/spf13/cobra)) = 1.6.0 +Provides: bundled(golang(github.com/spf13/cobra)) = 1.7.0 Provides: bundled(golang(github.com/spf13/pflag)) = 1.0.5 Provides: bundled(golang(github.com/ssgelm/cookiejarparser)) = 1.0.1 Provides: bundled(golang(github.com/stretchr/testify)) = 1.6.1 Provides: bundled(golang(github.com/xeipuuv/gojsonpointer)) = 4e3ac27 Provides: bundled(golang(github.com/xeipuuv/gojsonreference)) = bd5ef7b Provides: bundled(golang(github.com/xeipuuv/gojsonschema)) = 6b67b3f -Provides: bundled(golang(golang.org/x/crypto)) = 7b82a4e -Provides: bundled(golang(golang.org/x/net)) = 0.7.0 +Provides: bundled(golang(golang.org/x/crypto)) = 0.21.0 +Provides: bundled(golang(golang.org/x/net)) = 0.23.0 Provides: bundled(golang(golang.org/x/sync)) = 0.1.0 -Provides: bundled(golang(golang.org/x/sys)) = 0.5.0 -Provides: bundled(golang(golang.org/x/text)) = 0.7.0 +Provides: bundled(golang(golang.org/x/sys)) = 0.18.0 +Provides: bundled(golang(golang.org/x/text)) = 0.14.0 Provides: bundled(golang(gopkg.in/yaml.v3)) = 3.0.1 -%if 0%{?with_check} -# For tests +# Generate man pages +BuildRequires: /usr/bin/asciidoctor + +%if %{with check} +# Tests BuildRequires: perl-Digest-SHA BuildRequires: perl-Test-Harness # Tests require full git suite, but not generally needed. @@ -97,11 +102,6 @@ install -m 0755 -vd %{gobuilddir}/bin install -m 0755 -vd "$(dirname %{gobuilddir}/src/%{goipath})" ln -fs "$(pwd)" "%{gobuilddir}/src/%{goipath}" -%if %{?with_manpages} -# Unpack manpages generated by %%{SOURCE2} -tar -xf %{SOURCE1} -%endif - # Modify tests so that they expect binaries where we build them. sed -i -e 's!\.\./bin/!/%{gobuilddir}/bin/!g' t/Makefile sed -i -e 's!^BINPATH=.\+!BINPATH="%{gobuilddir}/bin"!g' t/testenv.sh @@ -110,17 +110,24 @@ sed -i -e 's!^BINPATH=.\+!BINPATH="%{gobuilddir}/bin"!g' t/testenv.sh export GOPATH=%{gobuilddir}:%{gopath} export GO111MODULE=off +# Enable FIPS support at build time by enabling CGO and enforcing strict FIPS runtime +export CGO_ENABLED=1 +export GOEXPERIMENT=strictfipsruntime + # Build manpages first (some embedding in the executable is done.) +make man GIT_LFS_SHA=unused VERSION=unused PREFIX=unused pushd docs -%gobuild -o mangen man/mangen.go -./mangen -# Removes unwanted source files -# https://bugzilla.redhat.com/show_bug.cgi?id=1852842 -rm mangen man/mangen.go +%gobuild -o %{gobuilddir}/bin/mangen man/mangen.go +%{gobuilddir}/bin/mangen popd %gobuild -o %{gobuilddir}/bin/git-lfs %{goipath} +# Generate completion files. +for shell in bash fish zsh; do + %{gobuilddir}/bin/git-lfs completion ${shell} > %{name}.${shell} +done + # Build test executables pushd %{gobuilddir}/src/%{goipath} for cmd in t/cmd/*.go; do @@ -129,27 +136,29 @@ done %gobuild -o "%{gobuilddir}/bin/git-lfs-test-server-api" t/git-lfs-test-server-api/*.go popd +# Remove man pages from docs so they don't get installed twice. +rm -r docs/man + %install -# In Fedora this is done by using %%gopkginstall install -Dpm0755 %{gobuilddir}/bin/git-lfs %{buildroot}%{_bindir}/%{name} -install -d -p %{buildroot}%{_mandir}/man1/ -install -Dpm0644 man/man1/*.1 %{buildroot}%{_mandir}/man1/ -install -d -p %{buildroot}%{_mandir}/man5/ -install -Dpm0644 man/man5/*.5 %{buildroot}%{_mandir}/man5/ -install -d -p %{buildroot}%{_mandir}/man7/ -install -Dpm0644 man/man7/*.7 %{buildroot}%{_mandir}/man7/ - -# Remove unwanted files from man folder -# https://bugzilla.redhat.com/show_bug.cgi?id=1852842 -rm -r man/* +for section in 1 5 7; do + install -d -p %{buildroot}%{_mandir}/man${section}/ + install -Dpm0644 man/man${section}/*.${section} %{buildroot}%{_mandir}/man${section}/ +done +install -Dpm 0644 %{name}.bash %{buildroot}%{bash_completions_dir}/%{name} +install -Dpm 0644 %{name}.fish %{buildroot}%{fish_completions_dir}/%{name}.fish +install -Dpm 0644 %{name}.zsh %{buildroot}%{zsh_completions_dir}/_%{name} %post +if [ "x$(git config --type=bool --get 'fedora.git-lfs.no-modify-config')" != "xtrue" ]; then %{_bindir}/%{name} install --system --skip-repo +fi %preun -if [ $1 -eq 0 ]; then +if [ $1 -eq 0 ] && \ + [ "x$(git config --type=bool --get 'fedora.git-lfs.no-modify-config')" != "xtrue" ]; then %{_bindir}/%{name} uninstall --system --skip-repo fi exit 0 @@ -157,76 +166,198 @@ exit 0 %if %{with check} %check +%gocheck PATH=%{buildroot}%{_bindir}:%{gobuilddir}/bin:$PATH \ -# https://github.com/git-lfs/git-lfs/issues/5609 -# tests fails when running with low level of parallelism - make -C t PROVE_EXTRA_ARGS="-j40 -v" + make -C t PROVE_EXTRA_ARGS="-j$(getconf _NPROCESSORS_ONLN)" %endif %files -# In Fedora this is done by using %%gopkgfiles %doc README.md CHANGELOG.md docs %license LICENSE.md %{_bindir}/%{name} %{_mandir}/man1/%{name}*.1* %{_mandir}/man5/%{name}*.5* %{_mandir}/man7/%{name}*.7* +%{bash_completions_dir}/%{name} +%{fish_completions_dir}/%{name}.fish +%{zsh_completions_dir}/_%{name} %changelog -* Tue Jun 10 2025 Ondřej Pohořelský - 3.4.1-5 +## START: Generated by rpmautospec +* Tue Jun 03 2025 Ondřej Pohořelský - 3.6.1-2 - Rebuild with new Golang -- Resolves: RHEL-89264 -* Fri Jan 17 2025 Ondřej Pohořelský - 3.4.1-4 -- Backport CVE-2024-53263 fixes -- Resolves: RHEL-73931 +* Wed Jan 15 2025 Ondřej Pohořelský - 3.6.1-1 +- Update to 3.6.1 -* Mon Sep 23 2024 Ondřej Pohořelský - 3.4.1-3 +* Thu Dec 12 2024 Ondřej Pohořelský - 3.6.0-1 +- Update to 3.6.0 + +* Tue Oct 29 2024 Troy Dawson - 3.5.1-6 +- Bump release for October 2024 mass rebuild: + +* Fri Oct 11 2024 Ondřej Pohořelský - 3.5.1-5 - Rebuild with new Golang -- Resolves: RHEL-57900 -* Mon Apr 22 2024 Ondřej Pohořelský - 3.4.1-2 -- Rebuild with new Golang -- Resolves: RHEL-32543, RHEL-28377, RHEL-28399, RHEL-28423 +* Tue Aug 06 2024 Ondřej Pohořelský - 3.5.1-4 +- Make Git-LFS FIPS compliant -* Mon Dec 18 2023 Ondrej Pohorelsky - 3.4.1-1 -- Update to version 3.4.1 -- Resolves: RHEL-17102 +* Mon Jun 24 2024 Troy Dawson - 3.5.1-3 +- Bump release for June 2024 mass rebuild -* Mon Jan 30 2023 Ondrej Pohorelsky - 3.2.0-2 -- Rebuild with Golang-1.19.4 -- Resolves: #2163744 +* Tue May 28 2024 Lukáš Zachar - 3.5.1-2 +- Add tmt based gating -* Mon Jan 09 2023 Ondrej Pohorelsky - 3.2.0-1 -- Update to version 3.2.0 -- Resolves: #2139382 +* Mon May 27 2024 Ondřej Pohořelský - 3.5.1-1 +- Enable bundling, update 3.5.1 -* Mon Jan 17 2022 Ondrej Pohorelsky - 2.13.3-2 -- Define %%gobuild macro with proper ldflags -- Related: rhbz#2021549 +* Sun Jul 30 2023 Elliott Sales de Andrade - 3.4.0-1 +- Update to latest version (#2226881) -* Tue Nov 23 2021 Ondrej Pohorelsky - 2.13.3-1 -- Update to version 2.13.3 -- Fixed round brackets in Provides -- Moved manpages.tgz to look-a-side cache -- Resolves: rhbz#2021549, rhbz#1870080, rhbz#1866441 +* Wed Jul 19 2023 Fedora Release Engineering - 3.3.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild -* Wed Jul 1 2020 Ondrej Pohorelsky - 2.11.0-2 -- Removed mangen source file -- Cleaned docs/man folder -- Resolves: rhbz#1852842 +* Mon Apr 10 2023 Elliott Sales de Andrade - 3.3.0-2 +- Switch to SPDX license -* Wed Jun 10 2020 Ondrej Pohorelsky - 2.11.0-1 -- Update to version 2.11.0 -- Resolves: rhbz#1783391 +* Mon Feb 27 2023 Elliott Sales de Andrade - 3.3.0-1 +- Update to latest version (#2149792) -* Thu Jul 19 2018 Sebastian Kisela - 2.4.1-3 -- Add pregenerated manpages, due to missing dependency 'ronn' in rhel7. +* Thu Jan 19 2023 Fedora Release Engineering - 3.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild -* Wed Jul 18 2018 Sebastian Kisela - 2.4.1-2 -- Initial build for rh-git218-git-lfs-2.4.1 +* Sun Oct 02 2022 Elliott Sales de Andrade - 3.2.0-1 +- Update to latest version (#2076796) + +* Thu Jul 21 2022 Fedora Release Engineering - 3.1.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Maxwell G - 3.1.2-5 +- Rebuild for + CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in golang + +* Sat Jun 18 2022 Robert-André Mauchin - 3.1.2-4 +- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, + CVE-2022-27191, CVE-2022-29526, CVE-2022-30629 + +* Fri Jun 17 2022 Robert-André Mauchin - 3.1.2-3 +- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, + CVE-2022-27191, CVE-2022-29526, CVE-2022-30629 + +* Sun Apr 17 2022 Fabio Alessandro Locati - 3.1.2-2 +- Rebuilt for CVE-2022-27191 + +* Sun Mar 20 2022 Elliott Sales de Andrade - 3.1.2-1 +- Update to latest version (#2054522) + +* Thu Jan 20 2022 Fedora Release Engineering - 3.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sun Oct 31 2021 Elliott Sales de Andrade - 3.0.2-1 +- Update to latest version (#2018470) + +* Tue Oct 05 2021 Elliott Sales de Andrade - 3.0.1-1 +- Update to 3.0.1 + +* Tue Oct 05 2021 Elliott Sales de Andrade - 2.13.3-4 +- Verify checksums and GPG signature of source tarball + +* Thu Jul 22 2021 Fedora Release Engineering - 2.13.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Apr 02 2021 Elliott Sales de Andrade - 2.13.3-1 +- Update to latest version (#1943775) + +* Tue Jan 26 2021 Fedora Release Engineering - 2.13.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sat Jan 16 2021 Elliott Sales de Andrade - 2.13.2-1 +- Update to latest version (#1915996) + +* Mon Nov 09 2020 Elliott Sales de Andrade - 2.12.1-1 +- Update to latest version (#1894780) + +* Thu Sep 03 2020 Elliott Sales de Andrade - 2.12.0-1 +- Update to latest version (#1874604) +- Remove duplicate docs/man directory (#1852765) +- Add an option to disable modifying the git filter config (#1768060) + +* Sat Aug 01 2020 Fedora Release Engineering - 2.11.0-3 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 2.11.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sun May 10 2020 Elliott Sales de Andrade - 2.11.0-1 +- Update to latest version + +* Thu Feb 20 2020 Elliott Sales de Andrade - 2.10.0-1 +- Update to latest version + +* Tue Jan 28 2020 Fedora Release Engineering - 2.9.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Tue Jan 07 2020 Elliott Sales de Andrade - 2.9.2-1 +- Update to latest version + +* Wed Jan 01 2020 Elliott Sales de Andrade - 2.9.0-1 +- Update to latest version + +* Fri Aug 30 2019 Elliott Sales de Andrade - 2.8.0-4 +- Customize vendor information in version + +* Fri Aug 30 2019 Elliott Sales de Andrade - 2.8.0-3 +- Update to latest version + +* Thu Jul 25 2019 Fedora Release Engineering - 2.7.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Jul 10 2019 Elliott Sales de Andrade - 2.7.2-2 +- Update to latest Go macros + +* Wed Apr 24 2019 Elliott Sales de Andrade - 2.7.2-1 +- Update to latest version + +* Wed Feb 27 2019 Elliott Sales de Andrade - 2.7.1-1 +- Update to latest version + +* Thu Feb 21 2019 Elliott Sales de Andrade - 2.7.0-1 +- Update to latest version + +* Thu Jan 31 2019 Fedora Release Engineering - 2.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jan 15 2019 Elliott Sales de Andrade - 2.6.1-1 +- Update to latest version + +* Mon Jan 14 2019 Elliott Sales de Andrade - 2.5.2-4 +- Rebuilt for dependencies + +* Tue Oct 23 2018 Nicolas Mailhot +- 2.5.2-3 +- redhat-rpm-config-123 triggers bugs in gosetup, remove it from Go spec files as it’s just an alias +- https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/RWD5YATAYAFWKIDZBB7EB6N5DAO4ZKFM/ + +* Fri Oct 12 2018 Elliott Sales de Andrade - 2.5.2-2 +- rebuilt + +* Wed Oct 10 2018 Elliott Sales de Andrade - 2.5.2-1 +- Update to latest version + +* Tue Sep 04 2018 Elliott Sales de Andrade - 2.5.1-1 +- Update to latest version + +* Mon Sep 03 2018 Elliott Sales de Andrade - 2.5.0-1 +- Update to 2.5.0 + +* Wed Aug 29 2018 Elliott Sales de Andrade - 2.4.2-1 +- Update to 2.4.2 + +* Tue Jul 31 2018 Florian Weimer - 2.4.1-3 +- Rebuild with fixed binutils * Fri Jul 13 2018 Fedora Release Engineering - 2.4.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild @@ -297,3 +428,5 @@ PATH=%{buildroot}%{_bindir}:%{gobuilddir}/bin:$PATH \ * Sun May 15 2016 Igor Gnatenko - 1.2.0-1 - Initial package + +## END: Generated by rpmautospec