Git development
 help / color / mirror / Atom feed
* tracking many cvs/svn/git remote archives
@ 2006-11-20 17:18 Randal L. Schwartz
  2006-11-21 14:57 ` remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives) Randal L. Schwartz
  0 siblings, 1 reply; 6+ messages in thread
From: Randal L. Schwartz @ 2006-11-20 17:18 UTC (permalink / raw)
  To: git


Now that git-cvsimport and git-svn are mature, I'll share my script which I
call "get.cvs" to track a number of remote archives.  It's not extremely
general, but maybe it'll inspire someone else to generalize it.

I have ~/MIRROR/foo-GITSVN tracking a remote archive using git-svn, so
the name of the directory reflects the tracking mechanism.  There's also
*-CVS, *-SVN, *-GIT, and *-GITCVS.

For *-GITCVS, I have to keep the args for git-cvsimport around, so I
store that in the respository under getcvs.gitcvsargs.

For *-GITSVN, I have to force the head/origin to softlink to the proper remote
svn reference.

The *-GIT* merges are safe, because they won't pull over any uncommited
entries, but they *will* merge into whatever the current branch is.  This
keeps any checked out tree trivially up to date, which is mostly what I'm
watching anyway.

Setting up *-GIT* generally requires checking out a master branch to really
track the files... I think I did this with "git-checkout -b master origin".

#!/bin/sh

cd && cd MIRROR || exit 1

case $# in
    0) set -- '*';;
esac

eval set -- "$@"

trap ':' 2
for i in "$@"
do (
        trap - 2
        cd $i || exit
        echo == $i ==
        case $i in
            *-CVS) cvs -q update;;
            *-SVN) svn update;;
            *-GIT*)
                ## first, update "origin":
                case $i in
                    *-GIT)
                        git-fetch
                        ;;
                    *-GITCVS)
                        git-cvsimport -k -i $(git-repo-config getcvs.gitcvsargs)
                        ;;
                    *-GITSVN)
                        ## be sure to have origin "ref: refs/remotes/git-svn"
                        git-svn multi-fetch
                        ;;
                esac
                if git-status | grep -v 'nothing to commit'
                then echo UPDATE SKIPPED
                else
                    if git-pull . origin | egrep -v 'up-to-date'
                    then
                        git log --no-merges ORIG_HEAD.. | git shortlog
                    fi
                fi
                ;;
            *)
                echo "[ignoring]";;
        esac
        )
done


-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.

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

* remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives)
  2006-11-20 17:18 tracking many cvs/svn/git remote archives Randal L. Schwartz
@ 2006-11-21 14:57 ` Randal L. Schwartz
  2006-11-21 15:13   ` remotes/* for "foreign" archives Seth Falcon
  2006-11-21 19:33   ` Junio C Hamano
  0 siblings, 2 replies; 6+ messages in thread
From: Randal L. Schwartz @ 2006-11-21 14:57 UTC (permalink / raw)
  To: git

>>>>> "Randal" == Randal L Schwartz <merlyn@stonehenge.com> writes:

Randal>             *-GIT*)
Randal>                 ## first, update "origin":
Randal>                 case $i in
Randal>                     *-GIT)
Randal>                         git-fetch
Randal>                         ;;
Randal>                     *-GITCVS)
Randal>                         git-cvsimport -k -i $(git-repo-config getcvs.gitcvsargs)
Randal>                         ;;
Randal>                     *-GITSVN)
Randal>                         ## be sure to have origin "ref: refs/remotes/git-svn"
Randal>                         git-svn multi-fetch
Randal>                         ;;
Randal>                 esac

It occurred to me after posting this, and while still thinking about the
presentation I'm writing, that it'd be interesting if "get-fetch" could hide
this from me.

If the file in remotes/origin looked something like:

        Pull: !git-svn multi-fetch trunk
        Push: !git-svn commit

then git-fetch and git-push could treat "origin" as a "foreign" branch
and indirect through these commands.

Then I could just use "git-pull" naively, and it would git-fetch origin,
invoking git-svn multi-fetch trunk to update it, and later I could
git-push and it would use git-svn commit.

This idea is half baked, but it could definitely hide the various foreign
adaptors from the invocation line, allowing layered tools to use them
transparently.

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.

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

* Re: remotes/* for "foreign" archives
  2006-11-21 14:57 ` remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives) Randal L. Schwartz
@ 2006-11-21 15:13   ` Seth Falcon
  2006-11-21 16:53     ` Randal L. Schwartz
  2006-11-21 19:33   ` Junio C Hamano
  1 sibling, 1 reply; 6+ messages in thread
From: Seth Falcon @ 2006-11-21 15:13 UTC (permalink / raw)
  To: git

merlyn@stonehenge.com (Randal L. Schwartz) writes:
> It occurred to me after posting this, and while still thinking about the
> presentation I'm writing, that it'd be interesting if "get-fetch" could hide
> this from me.
>
> If the file in remotes/origin looked something like:
>
>         Pull: !git-svn multi-fetch trunk
>         Push: !git-svn commit
>
> then git-fetch and git-push could treat "origin" as a "foreign" branch
> and indirect through these commands.
>
> Then I could just use "git-pull" naively, and it would git-fetch origin,
> invoking git-svn multi-fetch trunk to update it, and later I could
> git-push and it would use git-svn commit.

This sort of integration could be quite cool.  But I think the most
common use of git-svn is with rebase and not pull.  My experience
with git-svn and pull is that I very quickly ended up making broken
commits to svn --- I've had much better luck rebasing.


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

* Re: remotes/* for "foreign" archives
  2006-11-21 15:13   ` remotes/* for "foreign" archives Seth Falcon
@ 2006-11-21 16:53     ` Randal L. Schwartz
  0 siblings, 0 replies; 6+ messages in thread
From: Randal L. Schwartz @ 2006-11-21 16:53 UTC (permalink / raw)
  To: Seth Falcon; +Cc: git

>>>>> "Seth" == Seth Falcon <sethfalcon@gmail.com> writes:

Seth> This sort of integration could be quite cool.  But I think the most
Seth> common use of git-svn is with rebase and not pull.  My experience
Seth> with git-svn and pull is that I very quickly ended up making broken
Seth> commits to svn --- I've had much better luck rebasing.

Well, you'd still be using "git-fetch origin" then, transparently,
and your push command could do your preferred thing.

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.

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

* Re: remotes/* for "foreign" archives
  2006-11-21 14:57 ` remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives) Randal L. Schwartz
  2006-11-21 15:13   ` remotes/* for "foreign" archives Seth Falcon
@ 2006-11-21 19:33   ` Junio C Hamano
  2006-11-21 20:42     ` Petr Baudis
  1 sibling, 1 reply; 6+ messages in thread
From: Junio C Hamano @ 2006-11-21 19:33 UTC (permalink / raw)
  To: Randal L. Schwartz; +Cc: git

merlyn@stonehenge.com (Randal L. Schwartz) writes:

> It occurred to me after posting this, and while still thinking about the
> presentation I'm writing, that it'd be interesting if "get-fetch" could hide
> this from me.

I agree fully, as it was in my earlier "wishlist" ;-)

Anybody?

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

* Re: remotes/* for "foreign" archives
  2006-11-21 19:33   ` Junio C Hamano
@ 2006-11-21 20:42     ` Petr Baudis
  0 siblings, 0 replies; 6+ messages in thread
From: Petr Baudis @ 2006-11-21 20:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Randal L. Schwartz, git

On Tue, Nov 21, 2006 at 08:33:48PM CET, Junio C Hamano wrote:
> merlyn@stonehenge.com (Randal L. Schwartz) writes:
> 
> > It occurred to me after posting this, and while still thinking about the
> > presentation I'm writing, that it'd be interesting if "get-fetch" could hide
> > this from me.
> 
> I agree fully, as it was in my earlier "wishlist" ;-)
> 
> Anybody?

It's currently right after first stage of remotes support in Cogito in
my TODO list (and that's not a vaporware anymore but is actually what
I'm already working on these days).

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
The meaning of Stonehenge in Traflamadorian, when viewed from above, is:
"Replacement part being rushed with all possible speed."

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

end of thread, other threads:[~2006-11-21 20:42 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-20 17:18 tracking many cvs/svn/git remote archives Randal L. Schwartz
2006-11-21 14:57 ` remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives) Randal L. Schwartz
2006-11-21 15:13   ` remotes/* for "foreign" archives Seth Falcon
2006-11-21 16:53     ` Randal L. Schwartz
2006-11-21 19:33   ` Junio C Hamano
2006-11-21 20:42     ` Petr Baudis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox