54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package commands
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/git-lfs/git-lfs/git"
|
|
"github.com/rubyist/tracerx"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// postCommitCommand is run through Git's post-commit hook. The hook passes
|
|
// no arguments.
|
|
// This hook checks that files which are lockable and not locked are made read-only,
|
|
// optimising that based on what was added / modified in the commit.
|
|
// This is mainly to catch added files, since modified files should already be
|
|
// locked. If we didn't do this, any added files would remain read/write on disk
|
|
// even without a lock unless something else checked.
|
|
func postCommitCommand(cmd *cobra.Command, args []string) {
|
|
|
|
// Skip entire hook if lockable read only feature is disabled
|
|
if !cfg.SetLockableFilesReadOnly() {
|
|
os.Exit(0)
|
|
}
|
|
|
|
requireGitVersion()
|
|
|
|
lockClient := newLockClient()
|
|
|
|
// Skip this hook if no lockable patterns have been configured
|
|
if len(lockClient.GetLockablePatterns()) == 0 {
|
|
os.Exit(0)
|
|
}
|
|
|
|
tracerx.Printf("post-commit: checking file write flags at HEAD")
|
|
// We can speed things up by looking at what changed in
|
|
// HEAD, and only checking those lockable files
|
|
files, err := git.GetFilesChanged("HEAD", "")
|
|
|
|
if err != nil {
|
|
LoggedError(err, "Warning: post-commit failed: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
tracerx.Printf("post-commit: checking write flags on %v", files)
|
|
err = lockClient.FixLockableFileWriteFlags(files)
|
|
if err != nil {
|
|
LoggedError(err, "Warning: post-commit locked file check failed: %v", err)
|
|
}
|
|
|
|
}
|
|
|
|
func init() {
|
|
RegisterCommand("post-commit", postCommitCommand, nil)
|
|
}
|