Is there an hg equivalent to git-mv? - mercurial

I have a file foo.py with some history. I want to rename it bar.py but see the history with "hg log".
I tried "hg rename". It does not seem to maintain the history.
FYI. I only browsed the man page.
Thanks in advance!
Thanks for the answer.
As an addendum, if foo.py is 500 KB, will a rename increase the size of the repository by at least 500 KB? Is there any way where it can not do this and simply store a name mapping?

Use hg log --follow. From hg help log:
-f --follow follow changeset history, or file history across copies and renames

Related

Mercurial Log by file extension

I'm trying to find a way to generate a HG log file with history for just certain file types (like *.java). I need the diffs with the log...but again only the .java files.
Thanks
It sounds like you want something like this:
hg log --patch --rev "modifies('**.java')"
See hg help revsets and hg help filesets for information on how to target Mercurial command using specific rules.

How to tell progress of hg pull?

$ hg pull
Password:
pulling from ssh://foo#bar.com:22//home/usr/xxx/repo
searching for changes
adding changesets
adding manifests
adding file changes
It then keep showing the above for 10+ min. Is there a way to tell the progress and whether it's still live or already dead?
Use the Progress extension by adding the following to your HGRC:
[extensions]
progress =
and/or use the verbose option:
hg pull -v
There is a related question on StackOverflow that may also be useful to you.
As for your followup question: if Mercurial is tracking a file (that is, if you hg add and later hg commit subdir1/subsubdir1/foobar.c) then it wont ignore it. So .hgignore can only help you clean up the entries listed with ? (the unknown files) in hg status — it wont have any effect on tracked files.
The progress extension is your friend. You can also add the -v/--verbose and --debug switches to hg pull see more data.

Mercurial, how to remove file from repository?

I push in our repository more big video files, my fault, I did not notice them and forgot to add the folder with the video to ignore file. Now my friends can not upgrade because a shortage of memory (abort: out of memory). How do I remove a video from the master repository? I tried to just delete the folder with the video in /home/hg/project/.hg/ But then do not start updating with an error. Help me pliz and sorry for my english/
See the Mercurial FAQ:
4.14. I committed a change containing nuclear launch codes, how do I delete it permanently?
4.15. I committed a large binary file/files, how do I delete them permanently?
There are some options described on the Editing History page as well.
You:
$ hg rm video.ogv
$ hg ci -m "removed video.ogv"
Other:
$ hg pull your-repository
$ hg update
The HG FAQ merely gives a few vague pointers. Here's how to do it:
Add to your .hgrc:
[extensions]
hgext.convert=
[convert]
hg.saverev=false
Create a filemap of what files you want to remove (myfilemap)
exclude "relative/path/to/file.mp4"
Use hg convert to make a new repo
hg convert --filemap myfilemap myrepo myrepo.new
Now you have the new repo without the excluded files.

It it possible to update specific directory to old revision in Mercurial?

I tried to update some files to old revision in many ways, but I haven't found yet.
(not permanently, just temporarily updating for testing)
For example, the following is OK in SVN.
svn up -r 100 foo.cpp
U foo.cpp
But in Mercurial, 'up' command doesn't permit file name argument.
Only is it possible to update entire source tree in Mercurial?
You'd have to use hg revert:
hg revert -r 100 foo.cpp
Note that this gives you local changes, as can be seen by running hg diff.
See hg help revert for more info.
This is fundamentally disallowed by Mercurial and other DVCSs. Both CVS and Subversion track which revision you have checked out on a per-file basis. You could have r1 of file x and r2 of file y. In a DVCs the entire repository is at a single version, which in Mercurial you can see with hg id.
As #Tom points out you can have modified files from different revisions, but if you want to see another revision without changes showing up you need to do the update in another clone (which given that local clones use hard links to be (a) instant and (b) space efficient) that's not much of a hassle.

File in repository after clone, but no history

We have a Mercurial repository converted from Subversion a while ago and have today noticed that there are files in the repository that have no history whatsoever.
One of the sympomts of this behaviour is that hg status reports the file as clean, while hg log reports no changesets for the same file:
> hg clone [repo]
> hg st -c FileWithMissingHistory.cs
C FileWithMissingHistory.cs
> hg blame FileWithMissingHistory.cs
FileWithMissingHistory.cs: no such file in rev [...]
> hg log FileWithMissingHistory.cs
> hg log FileWithMissingHistory.cs -f
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs"
> hg log -v | grep FileWithMissingHistory.cs
[gives output, there arechangesets mentioning the file]
Obviously the filenames have been changed in the example. I've tried using hg verify, but this command reports that the repo is fine. Has anyone experienced this and is there anything we could do to bring the history "back to life"? Placing dummy history on the files in question would be acceptable, but suboptimal.
EDIT:
I've done some more investigation and noticed that "FileWithMissingHistory.cs" was renamed from another filename (hg copy + delete) in revision 238. If I do hg update -r238 and hg log on the file at this revision I do not get any history. Doing hg log on the original file reports the history as expected, so it seems that the history is somehow lost during copy (again, the file is renamed using hg copy, and the changeset clearly indicates that the file has been copied).
Sounds strange, actually impossible. What I would try to debug this issue is to update to different revisions and check at which revision the file appears in the working copy the first time. If you do this in a binary search fashion (similar to how the bisect extension works), you should find a revision which introduces the file after a few updates.
This does not solve the problem, but it may help in tracking down its source.
I've finally tracked down the cause of the effects mentioned above and it seems that this is caused by mixed casing issues. Some of the files are located in directories with lowercase names while others are located in the directories with equal names, only that the case is mixed (e.g. "directory/FileWithHistory.cs" and "DiReCtOrY/FileWithMissingHistory.cs"). On Windows, both files will be located in the same directory causing issues.