Αλλαγή committer name σε hg repositories
George Notaras
gnot at g-loaded.eu
Thu Mar 29 01:18:06 EEST 2012
On 28/3/2012 11:03 μμ, Giorgos Keramidas wrote:
> 2012/3/28 George Notaras <gnot at g-loaded.eu>:
>>> FWIW, υπάρχει τρόπος να βρεις από ποιο "old changeset id" βγήκε
>>> κάθε νέο commit id στο converted repository. Η αντιστοιχία σώζεται
>>> στο αρχείο ".hg/shamap" στο target repository του conversion.
>>> Με λίγο scripting μπορείς να βρεις το νέο changeset id οποιουδήποτε
>>> παλιού commit και να κάνεις update σε αυτό.
>>
>> Αχά! Το ".hg/shamap" ακούγεται πολύ χρήσιμο. Αν το ήξερα πιο πριν, θα
>> βασιζόμουν πιθανότατα σε αυτό και όχι στο revision number.
>>
>> Από την άλλη, επειδή έκανα ήδη το conversion (έχω κρατήσει backup τα
>> παλιά βέβαια :P), αυτό που παρατήρησα είναι ότι το revision number του
>> κάθε changeset στο repository που προκύπτει από το conversion είναι
>> ακριβώς το ίδιο me to revision number που είχε το ίδιο changeset στο
>> original repository. Δηλαδή τα revision numbers (ή local identifiers -
>> αν χρησιμοποιώ σωστά την ορολογία) δεν φαίνεται να αλλάζουν.
>
> Αυτό έτυχε να συμβαίνει στο δικό σου repository, επειδή το hg προσπαθεί
> να διατηρήσει την ίδια "τοπολογία" στο γράφο του source history όπου
> αυτό είναι δυνατόν.
>
> ΠΡΟΣΟΧΗ όμως, δεν ισχύει πάντα. Π.χ. αν χρησιμοποιήσεις τα options:
>
> hg convert --branchsort
> hg convert --datesort
>
> Στο help του convert extension λέει το εξής:
>
> % hg help convert
> [...]
> By default, all sources except Mercurial will use --branchsort. Mercurial
> uses --sourcesort to preserve original revision numbers order. Sort modes
> have the following effects:
>
> --branchsort convert from parent to child revision when possible, which
> means branches are usually converted one after the other.
> It generates more compact repositories.
> --datesort sort revisions by date. Converted repositories have good-
> looking changelogs but are often an order of magnitude
> larger than the same ones generated by --branchsort.
> --sourcesort try to preserve source revisions order, only supported by
> Mercurial sources.
>
> Οπότε στη δική σου περίπτωση επειδή το source repository είναι τύπου
> Mercurial και επειδή _μπορούσε_ να γίνει conversion με 'sourcesort',
> έτυχε να ισχύει αυτό που λες με τα local revision numbers.
>
Έχεις δίκιο. Ο Σωστός(ΤΜ) τρόπος είναι να γίνει η επαναφορά του state
χρησιμοποιώντας το changeset id, αφού πρώτα γίνει η αντιστοιχία
παλιού->καινούριου μέσω του shamap.
Οπότε το παραπάνω θα γίνει κάπως έτσι:
________________________________
#! /usr/bin/env bash
REPOS_ROOT="."
AUTHOR_MAPPINGS="
myoldname = FirstName LastName <me at example.org>
"
echo
# First reset the authors.map file
echo "info: reseting authors.map..."
echo $AUTHOR_MAPPINGS > authors.map
for repo in $REPOS_ROOT/*
do
test -d $repo/.hg && \
echo "info: found hg repository at $repo" || continue
echo "info: storing the id of the current changeset of $repo"
CUR_ID=`hg -q -R $repo identify -i | sed 's#\+$##'`
echo "info: converting the repository using author mappings..."
# A temporary repository is created to hold updated history
hg -q convert -s hg -d hg -A authors.map $repo $repo-tmp
echo "info: moving updated history back to $repo..."
# Step 1: Update the state of the temporary repository
# to the CUR_ID changeset
# First, translate the old id to the new id using
# repo-new/.hg/shamap
NEW_ID=`grep $CUR_ID $repo-tmp/.hg/shamap | \
cut -d ' ' -f 2 | cut -c -13`
# Update the state of the temporary repo to the NEW_ID
hg -q -R $repo-tmp update $NEW_ID
# Step 2: Now move the history back to the original repository
# Delete .hg directory from the original repository
rm -fr $repo/.hg
# Move the .hg directory from the temporary repo
# to the original repo
mv $repo-tmp/.hg $repo/
# Delete the temporary repo directory
rm -rf $repo-tmp
echo "info: ok"
echo
-----------------------------------------------------------------------
done | tee hg-convert.log
echo "operation complete"
__________________________
Ωραία. Βρέθηκε η άκρη. Τώρα πρέπει να τα ξανακάνω δηλαδή;
More information about the Linux-greek-users
mailing list