-
-
Notifications
You must be signed in to change notification settings - Fork 6.2k
Closed
Labels
type/enhancementAn improvement of existing functionalityAn improvement of existing functionality
Description
- Gitea version (or commit ref): 1.10.0
- Git version:
2.22.0 - Operating system: docker
- Database (use
[x]):- PostgreSQL
- MySQL
- MSSQL
- SQLite
- Can you reproduce the bug at https://try.gitea.io:
- Yes (provide example URL)
- No
- Not relevant
- Log gist: No relevant log entries
Description
When the pre-receive, update and post-receive hooks have lost their executable permission (due to reasons not directly relevant to the actual bug), they should be automatically recreated with +x permission (see
Lines 1114 to 1150 in dfd8b94
| func createDelegateHooks(repoPath string) (err error) { | |
| var ( | |
| hookNames = []string{"pre-receive", "update", "post-receive"} | |
| hookTpls = []string{ | |
| fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType), | |
| fmt.Sprintf("#!/usr/bin/env %s\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\n\"${hook}\" $1 $2 $3\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType), | |
| fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType), | |
| } | |
| giteaHookTpls = []string{ | |
| fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' pre-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf), | |
| fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' update $1 $2 $3\n", setting.ScriptType, setting.AppPath, setting.CustomConf), | |
| fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' post-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf), | |
| } | |
| ) | |
| hookDir := filepath.Join(repoPath, "hooks") | |
| for i, hookName := range hookNames { | |
| oldHookPath := filepath.Join(hookDir, hookName) | |
| newHookPath := filepath.Join(hookDir, hookName+".d", "gitea") | |
| if err := os.MkdirAll(filepath.Join(hookDir, hookName+".d"), os.ModePerm); err != nil { | |
| return fmt.Errorf("create hooks dir '%s': %v", filepath.Join(hookDir, hookName+".d"), err) | |
| } | |
| // WARNING: This will override all old server-side hooks | |
| if err = ioutil.WriteFile(oldHookPath, []byte(hookTpls[i]), 0777); err != nil { | |
| return fmt.Errorf("write old hook file '%s': %v", oldHookPath, err) | |
| } | |
| if err = ioutil.WriteFile(newHookPath, []byte(giteaHookTpls[i]), 0777); err != nil { | |
| return fmt.Errorf("write new hook file '%s': %v", newHookPath, err) | |
| } | |
| } | |
| return nil | |
| } |
However, it turns out that this is not the case, apparently because ioutil.WriteFile does not change permissions on existing files.
Proposed solution by Zeripath: just need to call os.Chmod afterwards
guillep2k
Metadata
Metadata
Assignees
Labels
type/enhancementAn improvement of existing functionalityAn improvement of existing functionality