Existe alguma maneira que eu possa rastrear o que está removendo o sinalizador de executável de um arquivo?

1

Eu tenho um conjunto de ganchos git que constantemente têm seu sinalizador de executável removido. Estou completamente em uma perda para o que pode estar fazendo isso, mas até agora a única coisa que eu encontrei que pode até mesmo atenuar o problema é ter chmod +x ~/.git_template/hooks/* no meu arquivo .bashrc (quase sempre desaparece quando eu reinicializei o computador). Exceto colocar isso na minha função PS1 Estou ficando sem ideias e estou pensando se há alguma coisa a ver com minha configuração particular que possa estar causando isso ou se há alguma maneira de descobrir qual processo está causando isso .

Todos os meus repositórios git são criados com base no template ~/.git_template que apenas contém um link simbólico para o diretório hooks que eu uso (então todos eles estão usando versões atualizadas). Embora possa não ser completamente direto, não vejo nada que possa causar esse tipo de comportamento (francamente) desconcertante.

Edit: De fato, eu notei desde adicionar um novo hook ( post-checkout ) que todos os ganchos têm sua permissão executável removida toda vez que este hook é executado (pelo menos até agora). Apenas no caso de isso ser relevante, vou colar o hook completo aqui:

#!/usr/bin/env node

var spawn = require('child_process').spawn;

var providedArguments = process.argv.slice(2)
var previousHead = providedArguments[0];
var newHead = providedArguments[1];

var changed = false;
var git = spawn('git', ['diff', previousHead, newHead, '--stat', '--', 'package.json']);
git.stdout.on('data', function(data) {
    changed = true;
});
git.on('exit', function() {
    if (changed) {
        console.log('package.json changed. Running npm install');
        spawn('npm', ['install'], { stdio: 'inherit' });
    }
});
    
por Thor84no 10.06.2016 / 14:37

1 resposta

0

Eu executaria strace -fo strace.log ou o equivalente em seu sistema, se não Linux (como truss no Solaris, tusc no HP / UX, dtruss no OS / X ...) no comando que ( eventualmente, chama esse gancho.

Em seguida, em strace.log , você poderá ver o que o chmod() (ou fchmod() ou fchmodat() ...) e seguir o encadeamento de execve() s para ver o que causou a permissões de arquivos a serem modificadas.

    
por 28.07.2016 / 22:13