* How to tell if a file was renamed between two commits
@ 2010-02-03 2:29 Ron Garret
2010-02-03 2:32 ` Shawn O. Pearce
0 siblings, 1 reply; 6+ messages in thread
From: Ron Garret @ 2010-02-03 2:29 UTC (permalink / raw)
To: git
I'm trying to write a little utility that will extract all the revisions
of a particular file. I start with a git rev-list HEAD -- filename, get
the tree objects with git cat-file commit, the file objects with git
ls-tree, and finally the file contents themselves with git cat-file
blob. It works, except in the case where the file name was changed.
git rev-list is smart enough to track those name changes, but my little
revision tracker isn't. It dies when suddenly there is no file with the
right name in the tree.
So... is there an easy way to work around this? Is there a way to get,
say, rev-list to tell me when the file it is tracking changed names? Or
a git-diff incantation? I just need something that will tell me given
two commits and a file name whether the file was renamed between those
two commits and if so what its new name is. There must be an easy way
to do this, but I can't figure out what it is.
Thanks,
rg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to tell if a file was renamed between two commits
2010-02-03 2:29 How to tell if a file was renamed between two commits Ron Garret
@ 2010-02-03 2:32 ` Shawn O. Pearce
2010-02-03 2:48 ` Ron Garret
0 siblings, 1 reply; 6+ messages in thread
From: Shawn O. Pearce @ 2010-02-03 2:32 UTC (permalink / raw)
To: Ron Garret; +Cc: git
Ron Garret <ron1@flownet.com> wrote:
> I'm trying to write a little utility that will extract all the revisions
> of a particular file. I start with a git rev-list HEAD -- filename, get
> the tree objects with git cat-file commit, the file objects with git
> ls-tree, and finally the file contents themselves with git cat-file
> blob. It works, except in the case where the file name was changed.
> git rev-list is smart enough to track those name changes, but my little
> revision tracker isn't. It dies when suddenly there is no file with the
> right name in the tree.
>
> So... is there an easy way to work around this? Is there a way to get,
> say, rev-list to tell me when the file it is tracking changed names? Or
> a git-diff incantation? I just need something that will tell me given
> two commits and a file name whether the file was renamed between those
> two commits and if so what its new name is. There must be an easy way
> to do this, but I can't figure out what it is.
Maybe use the -M flag to git log, or the --follow flag to
log/rev-list?
--
Shawn.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to tell if a file was renamed between two commits
2010-02-03 2:32 ` Shawn O. Pearce
@ 2010-02-03 2:48 ` Ron Garret
2010-02-03 2:52 ` Ron Garret
2010-02-03 2:53 ` Shawn O. Pearce
0 siblings, 2 replies; 6+ messages in thread
From: Ron Garret @ 2010-02-03 2:48 UTC (permalink / raw)
To: git
In article <20100203023219.GA13092@spearce.org>,
"Shawn O. Pearce" <spearce@spearce.org> wrote:
> Ron Garret <ron1@flownet.com> wrote:
> > I'm trying to write a little utility that will extract all the revisions
> > of a particular file. I start with a git rev-list HEAD -- filename, get
> > the tree objects with git cat-file commit, the file objects with git
> > ls-tree, and finally the file contents themselves with git cat-file
> > blob. It works, except in the case where the file name was changed.
> > git rev-list is smart enough to track those name changes, but my little
> > revision tracker isn't. It dies when suddenly there is no file with the
> > right name in the tree.
> >
> > So... is there an easy way to work around this? Is there a way to get,
> > say, rev-list to tell me when the file it is tracking changed names? Or
> > a git-diff incantation? I just need something that will tell me given
> > two commits and a file name whether the file was renamed between those
> > two commits and if so what its new name is. There must be an easy way
> > to do this, but I can't figure out what it is.
>
> Maybe use the -M flag to git log, or the --follow flag to
> log/rev-list?
Nope. git log --follow will follow through a name change but won't
actually say when the name changed happened or what the previous name of
the file was.
And actually playing around with it some more, it appears that git
rev-list doesn't actually track file renames, or at least it doesn't do
it all the time. Weird. I'm going to have to play around with this
some more.
rg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to tell if a file was renamed between two commits
2010-02-03 2:48 ` Ron Garret
@ 2010-02-03 2:52 ` Ron Garret
2010-02-03 2:53 ` Shawn O. Pearce
1 sibling, 0 replies; 6+ messages in thread
From: Ron Garret @ 2010-02-03 2:52 UTC (permalink / raw)
To: git
In article <ron1-08A0F6.18483502022010@news.gmane.org>,
Ron Garret <ron1@flownet.com> wrote:
> In article <20100203023219.GA13092@spearce.org>,
> "Shawn O. Pearce" <spearce@spearce.org> wrote:
>
> > Ron Garret <ron1@flownet.com> wrote:
> > > I'm trying to write a little utility that will extract all the revisions
> > > of a particular file. I start with a git rev-list HEAD -- filename, get
> > > the tree objects with git cat-file commit, the file objects with git
> > > ls-tree, and finally the file contents themselves with git cat-file
> > > blob. It works, except in the case where the file name was changed.
> > > git rev-list is smart enough to track those name changes, but my little
> > > revision tracker isn't. It dies when suddenly there is no file with the
> > > right name in the tree.
> > >
> > > So... is there an easy way to work around this? Is there a way to get,
> > > say, rev-list to tell me when the file it is tracking changed names? Or
> > > a git-diff incantation? I just need something that will tell me given
> > > two commits and a file name whether the file was renamed between those
> > > two commits and if so what its new name is. There must be an easy way
> > > to do this, but I can't figure out what it is.
> >
> > Maybe use the -M flag to git log, or the --follow flag to
> > log/rev-list?
>
> Nope. git log --follow will follow through a name change but won't
> actually say when the name changed happened or what the previous name of
> the file was.
>
> And actually playing around with it some more, it appears that git
> rev-list doesn't actually track file renames, or at least it doesn't do
> it all the time. Weird. I'm going to have to play around with this
> some more.
>
> rg
Ah, I think I found it:
git log --follow --raw -- [filename]
gives you e.g.:
:100644 100644 01e79c3... 01e79c3... R100 foo baz
which seems to be what I'm looking for.
rg
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to tell if a file was renamed between two commits
2010-02-03 2:48 ` Ron Garret
2010-02-03 2:52 ` Ron Garret
@ 2010-02-03 2:53 ` Shawn O. Pearce
2010-02-03 17:48 ` Ron Garret
1 sibling, 1 reply; 6+ messages in thread
From: Shawn O. Pearce @ 2010-02-03 2:53 UTC (permalink / raw)
To: Ron Garret; +Cc: git
Ron Garret <ron1@flownet.com> wrote:
> In article <20100203023219.GA13092@spearce.org>,
> "Shawn O. Pearce" <spearce@spearce.org> wrote:
> > > So... is there an easy way to work around this? Is there a way to get,
> > > say, rev-list to tell me when the file it is tracking changed names?
> >
> > Maybe use the -M flag to git log, or the --follow flag to
> > log/rev-list?
>
> Nope. git log --follow will follow through a name change but won't
> actually say when the name changed happened or what the previous name of
> the file was.
>
> And actually playing around with it some more, it appears that git
> rev-list doesn't actually track file renames, or at least it doesn't do
> it all the time. Weird. I'm going to have to play around with this
> some more.
Use:
git log --format=%H -M --name-status --follow -- path
I just tried it:
$ git log --format=%H -M --name-status --follow gerrit-prettify/src/main/resources/com/google/gerrit/prettify/client/prettify.js
8db22c85c49814b99639b2e6346583e9be4c289f
R100 gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/client/
544546fcd680f82a88df3e9eba7df8acfadf1e46
M gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/client/
d83ac11a52c1b6d4acae932a8495daf1e9129fdf
R100 gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/public/
44671f5c6929a8f05223dd359182610286ceb98a
R100 src/main/java/com/google/gerrit/public/prettify20090521/prettify.js
56fc9e3d951b0886c4781a5c8623dbc3da824f30
A src/main/java/com/google/gerrit/public/prettify20090521/prettify.js
Yay, its been renamed 3 times in its life here. :-)
--
Shawn.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to tell if a file was renamed between two commits
2010-02-03 2:53 ` Shawn O. Pearce
@ 2010-02-03 17:48 ` Ron Garret
0 siblings, 0 replies; 6+ messages in thread
From: Ron Garret @ 2010-02-03 17:48 UTC (permalink / raw)
To: git
In article <20100203025347.GB13092@spearce.org>,
"Shawn O. Pearce" <spearce@spearce.org> wrote:
> Ron Garret <ron1@flownet.com> wrote:
> > In article <20100203023219.GA13092@spearce.org>,
> > "Shawn O. Pearce" <spearce@spearce.org> wrote:
> > > > So... is there an easy way to work around this? Is there a way to get,
> > > > say, rev-list to tell me when the file it is tracking changed names?
> > >
> > > Maybe use the -M flag to git log, or the --follow flag to
> > > log/rev-list?
> >
> > Nope. git log --follow will follow through a name change but won't
> > actually say when the name changed happened or what the previous name of
> > the file was.
> >
> > And actually playing around with it some more, it appears that git
> > rev-list doesn't actually track file renames, or at least it doesn't do
> > it all the time. Weird. I'm going to have to play around with this
> > some more.
>
> Use:
>
> git log --format=%H -M --name-status --follow -- path
>
> I just tried it:
>
> $ git log --format=%H -M --name-status --follow
> gerrit-prettify/src/main/resources/com/google/gerrit/prettify/client/prettify.
> js
> 8db22c85c49814b99639b2e6346583e9be4c289f
>
> R100
> gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/client/
> 544546fcd680f82a88df3e9eba7df8acfadf1e46
>
> M
> gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/client/
> d83ac11a52c1b6d4acae932a8495daf1e9129fdf
>
> R100
> gerrit-patch-gwtexpui/src/main/java/com/google/gwtexpui/safehtml/public/
> 44671f5c6929a8f05223dd359182610286ceb98a
>
> R100 src/main/java/com/google/gerrit/public/prettify20090521/prettify.js
>
> 56fc9e3d951b0886c4781a5c8623dbc3da824f30
>
> A src/main/java/com/google/gerrit/public/prettify20090521/prettify.js
>
>
> Yay, its been renamed 3 times in its life here. :-)
Cool! Thanks!
rg
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-02-03 17:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-03 2:29 How to tell if a file was renamed between two commits Ron Garret
2010-02-03 2:32 ` Shawn O. Pearce
2010-02-03 2:48 ` Ron Garret
2010-02-03 2:52 ` Ron Garret
2010-02-03 2:53 ` Shawn O. Pearce
2010-02-03 17:48 ` Ron Garret
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).