[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-ha-dev
Subject:    Re: [Linux-ha-dev] Mercurial changes getting lost
From:       Lars Marowsky-Bree <lmb () suse ! de>
Date:       2007-05-21 21:43:50
Message-ID: 20070521214350.GA1162 () marowsky-bree ! de
[Download RAW message or body]

On 2007-05-17T07:44:55, Alan Robertson <alanr@unix.sh> wrote:

> Here's where you can see that:

So, one of the things which fell out of this thread is that "hg log"
doesn't pick up everything one might want it to pick up, and inquired
about it at the hg list.

I got a very nice explanation about how hg works in this regard from
Matt himself. The thread can be found at
http://selenic.com/pipermail/mercurial/2007-May/013230.html

I hacked up a script "hg_traverse" which does pick up what happened here
- if you call it within the dev repo as "hg_traverse lrm/lrmd/lrmd.c tip
500", it'll follow up to 500 changesets from the tip and filter out any
changes to lrmd.c. (I attached it here for convenience.)

It's bloody slow, but it works. Maybe someone will implement it in
python proper for hg.


Regards,
    Lars

-- 
Teamlead Kernel, SuSE Labs, Research and Development
SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg)
"Experience is the name everyone gives to their mistakes." -- Oscar Wilde



#!/bin/bash

F=${1:-lrm/lrmd/lrmd.c}
cur_rev=${2:-tip}
max_revs=${3:-100}

get_sha() {
	hg manifest --debug $1 | grep $F | cut -f 1 -d ' '
}

diff_parent() {
	local parent="$1"
	if [ -z "$parent" ]; then
		return 1
	fi
	
	local psha=$(get_sha "$parent")
	if [ "$cur_sha" != "$psha" ]; then
		return 0
	fi
	return 1
}

rev_cnt=0
while [ $rev_cnt -lt $max_revs ] ; do
	r=$(hg log --template "{rev} {parents}\n" -r "$cur_rev")

	cur_rev=$(echo $r | cut -f 1 -d ' ')

	parent1=$(echo $r | cut -f 2 -s -d ' ' | cut -d ':' -f 1)
	parent2=$(echo $r | cut -f 3 -s -d ' ' | cut -d ':' -f 1)
	cur_sha=$(get_sha $cur_rev)

	next_rev=${parent1:-$[cur_rev-1]}

	ndiff=0
	if diff_parent $parent2 ; then
		echo "info: $cur_rev - following $parent2, not $next_rev" 1>&2
		ndiff=1
		next_rev=$parent2
	else
		if diff_parent $next_rev ; then
			ndiff=1	
		fi
	fi

	if [ $ndiff -gt 0 ]; then
		hg log -r $cur_rev
		hg diff -r $next_rev -r $cur_rev -p $F
		echo
	fi

	cur_rev=$next_rev
	rev_cnt=$[rev_cnt+1]
done

exit 0



_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic