Generating a list of which files changed between hg versions

34,808

Solution 1

hg status --rev x:y

where x and y are desired revision numbers (or tag or branch names).

If you are using the terminal in windows add hg status --rev x:y> your-file.txt to save the list to a file.

Solution 2

status is what you need.

But, depending what you mean by "between two revisions", you might also consider using the "x::y" (DAG - Directed Acyclic Graph) range.

Given parallel changesets,

1--2---4 \---3

hg status --rev 1:4 would return (1,2,3,4), i.e. anything between and including the endpoints, according to the local, numerical rev. This might (and most probably will) return different results in other - though related - repositories!

hg status --rev 1::4 would return (1,2,4), i.e. the endpoints, and all changesets which are descendants of '1' AND ancestors of '4'.

The latter case, x::y, is usually more useful in real-world applications. This is what you get via TortoiseHg\Visual Diff.


>hg help revsets:

"x::y" A DAG range, meaning all changesets that are descendants of x and ancestors of y, including x and y themselves. If the first endpoint is left out, this is equivalent to "ancestors(y)", if the second is left out it is equivalent to "descendants(x)".

Share:
34,808
Paul Nathan
Author by

Paul Nathan

Software engineer/craftman/programmer Passion for quality and correctness as exemplified in the continuous improvement/kaizen model. Obsessive about tools and infrastructure Focused on working in Scala/Rust/Lisp/Haskell/OCaml Articulate Lisp - a Common Lisp environment tutorial site. Learn Common Lisp today!

Updated on July 24, 2022

Comments

  • Paul Nathan
    Paul Nathan almost 2 years

    I want to generate a list of which files changed between two revisions in a given directory in Mercurial.

    In particular, I am not interested in what changed, but which files changed in that directory.

    E.g., supposing that between then and otherthen, only 2 files changed:

    >hg hypothetical-command -r then:otherthen
    foo.baz
    bar.baz
    >
    

    What's the hypothetical command? I've tried diff and log, but I can't see how to convince them to do it: either I get the patch(diff), or I get the whole repo(log).

  • User
    User over 10 years
    To only see changes in the current directory: hg status --rev x:y .
  • kunigami
    kunigami about 10 years
    To see the changes in the latest revision: hg status --rev .^
  • Cheetah
    Cheetah almost 9 years
    To get just the list of filenames (and no prefix character indicating the type of change), append -n, i.e. hg status --rev x:y -n
  • Metaxis
    Metaxis over 8 years
    hg status --change . lists the changed files in . - same list as hg status --rev .^ but more directly
  • PhoneixS
    PhoneixS over 8 years
    Maybe you need to include explicitly the command so your answer isn't dependent of the other and more fool-proof. Something like "Yes, status is what you need. For example hg status --rev x::y".