all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Repository follies
@ 2014-02-13 23:49 Eric S. Raymond
  2014-02-14  1:42 ` Stefan Monnier
  2014-02-14  9:08 ` Andreas Schwab
  0 siblings, 2 replies; 6+ messages in thread
From: Eric S. Raymond @ 2014-02-13 23:49 UTC (permalink / raw
  To: emacs-devel

I have unscrambled the mess made by up-converting a bunch of RCS files
into CVS about as much as is possible.  I've figured out which
=-prefixed attic files need to be renamed and in a couple of places where 
the real deletion points were.  

Finding those deletion points turns out to be quite hard to
do in general.  I've just added an extension to reposurgeon that
allows it to run custom Python procedures with full access to the
deserialized data structures inside the tool; I may try writing a crawler 
that mines the Changelog files looking for final mentions.

While doing this, I ran across some weird artifacts.  There is a whole
series of commits that modify both rcslog and =rcslog, pointing to
identical blobs for both.  The fix (dropping the =rcslog fileops) is
clear enough.

There's one small group of commits that's even weirder.

1992-04-19T08:53:55Z!jimb@redhat.com Makefile.in :1743 :1737
1992-12-06T22:12:37Z!jimb@redhat.com Makefile.in :5094 :5092
1993-01-26T01:58:16Z!jimb@redhat.com Makefile.in :5479 :5455

These three commits contain fileops for Makefile.in and =Makefile.in
*pointing to different blobs*.  I wrote the custom-code extension
because I had a dark suspicion things like this might exist and wanted
to be able to write code to find them. Here's what the crawler code
looks like:

# This is a reposurgeon script that sanity-checks a property of the Emacs repo.
# It is expected that stripped.fi was produced by stripping blobs out of
# attic.fi to preserve the structure.

read <stripped.fi

exec <<EOF

def sanecheck(repository, selection):
    for i in selection:
    	event = repository.events[i]
	for fileop1 in event.fileops:
	    if fileop1.op == 'M':
	        base1 = fileop1.path.split('/')[-1]
	        if base1.startswith('='):
		    for fileop2 in event.fileops:
			if fileop2.op == 'M':
			   base2 = fileop2.path.split('/')[-1]
			   if base2 == base1[1:]:
			       if fileop1.ref != fileop2.ref:
			           print("%s %s %s %s" % (event.committer.action_stamp(), fileop2.path, fileop1.ref, fileop2.ref))
EOF

=C eval sanecheck(_repository,_selection)

How those attic versions of Makefile.in persisted alongside it I don't
know. Why Makefile.in got deleted in RCS in the first place I don't
know - that was probably sonmeone's slip of the hand.  How
=Makefile.in ended up with modification fileops after the deletion
point I don't know. 

I suspect some of this, maybe all, was damage done at the time of
conversion to CVS. Say it with me: most repository conversion tools
*suck*.

Again, the right thing to do is clearly just to drop the fileops 
for the attic files. I'm griping about this mainly because I want
interested parties to be fully aware that there is nasty stuff back
there in the RCS and CVS parts of the history.  Reconstructing 
a clean set of changes that expresses the intentions of people
hacking at the time is hard work.

Speaking of hard work, I lost four days in the last week to a power
outage caused by Storm Nika.  Had to dig my way out of 14 inches 
of Storm Pax this morning.  And more snow is due tonight, my kung fu
class got cancelled dammit.  Means I'll have more time to work on this.

Back to the Augean stables...
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

"I hold it, that a little rebellion, now and then, is a good thing, and as 
necessary in the political world as storms in the physical."
	-- Thomas Jefferson, Letter to James Madison, January 30, 1787



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Repository follies
  2014-02-13 23:49 Repository follies Eric S. Raymond
@ 2014-02-14  1:42 ` Stefan Monnier
  2014-02-14  2:12   ` Eric S. Raymond
  2014-02-14  9:08 ` Andreas Schwab
  1 sibling, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2014-02-14  1:42 UTC (permalink / raw
  To: Eric S. Raymond; +Cc: emacs-devel

> Say it with me: most repository conversion tools *suck*.

FWIW, the repository conversion tool used when converting from RCS to
CVS was "mv".  While it kind of sucks as a "repository conversion
tool", it's fairly clean and robust in general ;-)


        Stefan



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Repository follies
  2014-02-14  1:42 ` Stefan Monnier
@ 2014-02-14  2:12   ` Eric S. Raymond
  0 siblings, 0 replies; 6+ messages in thread
From: Eric S. Raymond @ 2014-02-14  2:12 UTC (permalink / raw
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca>:
> > Say it with me: most repository conversion tools *suck*.
> 
> FWIW, the repository conversion tool used when converting from RCS to
> CVS was "mv".  While it kind of sucks as a "repository conversion
> tool", it's fairly clean and robust in general ;-)

OK, then, *doing repo conversions by hand* sucks. :-)

But hey, the 'automated' tools mostly suck too.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Repository follies
  2014-02-13 23:49 Repository follies Eric S. Raymond
  2014-02-14  1:42 ` Stefan Monnier
@ 2014-02-14  9:08 ` Andreas Schwab
  2014-02-14  9:19   ` Eric S. Raymond
  1 sibling, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2014-02-14  9:08 UTC (permalink / raw
  To: Eric S. Raymond; +Cc: emacs-devel

esr@thyrsus.com (Eric S. Raymond) writes:

> There's one small group of commits that's even weirder.
>
> 1992-04-19T08:53:55Z!jimb@redhat.com Makefile.in :1743 :1737
> 1992-12-06T22:12:37Z!jimb@redhat.com Makefile.in :5094 :5092
> 1993-01-26T01:58:16Z!jimb@redhat.com Makefile.in :5479 :5455
>
> These three commits contain fileops for Makefile.in and =Makefile.in
> *pointing to different blobs*.

??? That's Makefile.in and src/=Makefile.in, two unrelated files.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Repository follies
  2014-02-14  9:08 ` Andreas Schwab
@ 2014-02-14  9:19   ` Eric S. Raymond
  2014-02-14 14:00     ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Eric S. Raymond @ 2014-02-14  9:19 UTC (permalink / raw
  To: Andreas Schwab; +Cc: emacs-devel

Andreas Schwab <schwab@linux-m68k.org>:
> ??? That's Makefile.in and src/=Makefile.in, two unrelated files.

I'll re-check.  It would be very nice if my sanity checker
had a bug - it would simplify my life some.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Repository follies
  2014-02-14  9:19   ` Eric S. Raymond
@ 2014-02-14 14:00     ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2014-02-14 14:00 UTC (permalink / raw
  To: Eric S. Raymond; +Cc: Andreas Schwab, emacs-devel

> It would be very nice if my sanity checker had a bug

If that's what you need, then just send me the code, and I'll but a few
bugs in it.

No, don't think me, it's the least I could do,


        Stefan



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-02-14 14:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-13 23:49 Repository follies Eric S. Raymond
2014-02-14  1:42 ` Stefan Monnier
2014-02-14  2:12   ` Eric S. Raymond
2014-02-14  9:08 ` Andreas Schwab
2014-02-14  9:19   ` Eric S. Raymond
2014-02-14 14:00     ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.