Mercurial - todos os arquivos alterados em um changeset?

97

Como você pode determinar todos os arquivos que foram alterados em um determinado changeset?

Não estou procurando uma diferença neste caso, apenas uma lista de adicionar / remover / modificações.

hg log -vprX faz uma lista de diffs mas só quero os arquivos.

Marcus Leon
fonte
Possível duplicata de Examinando um único changeset no Mercurial
Michał Wróbel

Respostas:

149

Se você quiser listar apenas os arquivos que foram alterados, então você deve usar o "comando de status" O seguinte irá listar as mudanças nos arquivos na revisão REV

hg status --change REV
pyfunc
fonte
13
+1, mas o OP provavelmente quer o sinalizador -n/ --no-statustambém.
Niall C.
7
Para facilitar a cópia:hg status --no-status --change REV
zastrowm
+1 Isso é muito mais fácil de digitar do hg status --rev REV~1:REVque eu costumava fazer.
Patrick Oscity
3
usar '.' para REV atual. significando -hg status --change .
zaxy78
16

Basta remover pdo seu hg log -vprpara mostrar a lista de arquivos. -psignifica mostrar patch. Você também pode usar um modelo para formatar a saída de acordo com sua preferência.

Geoffrey Zheng
fonte
3
Acho que você precisará do seguinte modelo: --template 'arquivos: {arquivos} \ n'
Ton Plomp
1
Eu acredito que os {arquivos} fazem parte do modelo padrão de sinalização -v
eskhool
2
hg log -r. --template '{join (files, "\ n")}' para nova linha separar os arquivos
Foxichu
1
O comentário @Foxichu funcionou para mim, mas foi meio hackeado. na verdade, a resposta superior - hg status --change .funcionou melhor e forneceu um prefixo de ação de arquivo (A \ M \ D etc) e um caminho relativo melhor
zaxy78
13

Eu sei que a questão é para um único conjunto de alterações, mas se você quiser que todos os arquivos modificados para uma variedade de conjuntos de alterações, você pode fazer

hg status --rev 1 --rev 10 -m
Nick DeVore
fonte
2
Terrivelmente ruim. Arquivos modificados no intervalo são hg log -r BEGIN:END --template "{files}\n"como @ geoffrey-zheng e @ton escreveram há dois anos !!!
Lazy Badger
Me desculpe por isso. Presumindo que sua resposta fosse para o conjunto de alterações único.
Nick DeVore
1
Na minha opinião, essa resposta não é tão terrível. hg status --rev BEGIN --rev ENDé: 1. muito mais fácil de lembrar do que hg log -r BEGIN:END --template "{files}\n"; 2. imprime os arquivos em linhas separadas sem usar sed(@Eric Lawler) ou join()(@Foxichu); 3. sem o -msinalizador, ele exibe não apenas arquivos modificados, mas também adicionados e removidos (a bela coloração padrão se aplica aqui também); 4. existem -ae -rsinalizadores que permitem diferentes filtros; 5. se alguém não quiser o prefixo de status, existe a -nopção que o suprime.
Michał Wróbel
9

Revisão Comprometida Atual

hg status --change .

.é uma abreviatura para a rotação atual, assim como @HEADno Git

Revisão Não Comprometida Atual

hg status

Revisão Arbitrária Comprometida

hg status --change REV_ID
Gibolt
fonte
1
resposta mais simples e precisa!
zaxy78
2

Encontrei essa pergunta no Google por um conceito semelhante. Para mostrar todos os arquivos que foram alterados por meio de uma série de changesets, é tão fácil quanto:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"irá mostrar a você uma lista de cada arquivo alterado ou adicionado em cada changeset, de [start rev] a [end rev], com cada arquivo de changeset em uma nova linha. Troque {file_mods}{file_adds}com {files}para mostrar todos os arquivos modificados, adicionados ou removidos.
  2. sed -e 's/ /\n/g' irá dividir todos os arquivos para mostrar em linhas separadas e
  3. sort irá, er, classificar a lista para você para que possamos filtrar a lista com uniq
  4. uniq irá filtrar a lista para remover duplicatas - arquivos que foram alterados em mais de uma revisão.
Eric L.
fonte
Esta solução une a última modificação com o primeiro arquivo adicionado. Além disso, ele não lida adequadamente com espaços em nomes de arquivos. Uma --templatesolução baseada sem essas deficiências poderia ser construída usando join()como sugerido por @Foxichu.
Michał Wróbel
1

Eu sei que esta pergunta é uma pergunta antiga e estou surpreso que ninguém apenas ofereceu a forma de código modificado OP. Eu obtive uma lista de arquivos modificados / adicionados / removidos (não rotulados, que são quais) apenas executando hg log -v. Ou o que eu realmente precisava hg log -v -l5para ver os arquivos que foram modificados / adicionados / removidos nos últimos 5 commits (incluindo aqueles que ainda não coloquei no repositório).

Đorđe Relić
fonte
"ninguém apenas ofereceu a forma de código modificado OP" - @Geoffrey Zheng fez exatamente isso ~ 1h após a pergunta ser postada
Michał Wróbel
-2

Se você for como a maioria das lojas, você usa um sistema de bilheteria para rastrear as alterações. Se você souber o número do tíquete e quiser encontrar todos os commits associados a esse tíquete (supondo que você inclua o número do tíquete na mensagem de confirmação), você pode usar:

hg log -k TICKET_NUMBER

Isso exibe todas as revisões associadas ao ticket. No entanto, ele não lista os arquivos. Você poderia usar uma das respostas acima para obter a lista de arquivos associados às revisões.

Para tornar mais simples, porém, combinando as informações das respostas anteriores, você poderia fazer o seguinte para pesquisar commits, incluindo arquivos alterados:

hg log -vk TICKET_NUMBER
iDimensionz
fonte
Isso está relacionado à questão. O autor da postagem perguntou como obter arquivos em um changeset. Os conjuntos de alterações geralmente estão relacionados a tickets. Minha solução mostra como obter arquivos relacionados aos changesets associados a um ticket.
iDimensionz