This dir is intended to keep all the git clones.

There are some handy scripts I use for my daily Osmocom development:

 osmo-add-gerrit-hooks.sh
	Look for git repositories in and below the current dir and install the
	gerrit commit-msg hook in each one. This requires an ~/.ssh/config
	entry, see top comment in the script.

 fetch-gerrit-patch.sh
	Pass a patch number seen on gerrit to fetch the latest patch set into
	your git clone. See top comment in the script.

 ./g   run a git command in each source tree
 ./e   run an arbitrary shell command in each source tree
 ./st  show a brief branch and local mods status for each source tree
 ./s   walk through each source tree and use gitk as well as user interaction
       to quickly fast-forward / reset changes coming in from upstream. (This
       is potentially dangerous, but safe if you only hit enter every time.)

Examples:


-----------------------------------------------------------------------------

git clone ssh://go/osmo-msc

./osmo-add-gerrit-hooks.sh
+ cd /n/s/osmo/src/./osmo-msc/.git
+ [ ! -f hooks/commit-msg ]
+ scp go:hooks/commit-msg hooks/
commit-msg                                                             100% 4688     4.6KB/s   00:00    


-----------------------------------------------------------------------------


cd osmo-msc
../fetch-gerrit-patch.sh 3787
+ git fetch origin refs/changes/87/3787/2
From ssh://go/osmo-msc
 * branch            refs/changes/87/3787/2 -> FETCH_HEAD
+ git checkout -b 3787_2 FETCH_HEAD
Switched to a new branch '3787_2'


# or if you want an earlier patch set
../fetch-gerrit-patch.sh 3787/1
From ssh://go/osmo-msc
 * branch            refs/changes/87/3787/1 -> FETCH_HEAD
+ git checkout -b 3787_1 FETCH_HEAD
Switched to a new branch '3787_1'


-----------------------------------------------------------------------------

./g fetch    # run 'git fetch' in each clone = fetch all from upstream

===== libasn1c =====
remote: Counting objects: 29, done
remote: Finding sources: 100% (26/26)
remote: Total 26 (delta 8), reused 22 (delta 8)
Unpacking objects: 100% (26/26), done.
From ssh://go/libasn1c
   4151e59..aaae8c7  master     -> origin/master

===== libosmo-abis =====

===== libosmo-netif =====
remote: Counting objects: 105, done
remote: Finding sources: 100% (92/92)
remote: Total 92 (delta 54), reused 92 (delta 54)
Unpacking objects: 100% (92/92), done.
From ssh://go/libosmo-netif
   6032a35..e786055  master     -> origin/master
 + 058d3b7...89180ef pespin/jitterbuffer -> origin/pespin/jitterbuffer  (forced update)
 * [new branch]      pespin/osmux-lostpkt -> origin/pespin/osmux-lostpkt

===== libosmo-sccp =====

===== libosmocore =====
remote: Counting objects: 36, done
remote: Finding sources: 100% (24/24)
remote: Total 24 (delta 18), reused 24 (delta 18)
Unpacking objects: 100% (24/24), done.
From ssh://go/libosmocore
   4a29f34..733810c  master     -> origin/master

[...]

-----------------------------------------------------------------------------

./st         # any modifications / updates? (e.g. useful after './g fetch')
             # (checks only 'master' and the current checked-out branch)

     libasn1c master
 libosmo-abis master
libosmo-netif master
 libosmo-sccp MODS master[+1|-10]
  libosmocore master
    libsmpp34 master
     openggsn master
     osmo-bsc pre_release[+43|-43]
     osmo-hlr master
     osmo-iuh pre_release[+1]
     osmo-mgw pre_release
     osmo-msc pre_release
    osmo-sgsn pre_release

# This shows me that I have local mods in libosmo-sccp, while my local master
# branch has one commit that isn't on upstream ("+1"); but at the same time
# origin/master has moved on by 10 commits ("-10").
# My osmo-bsc git is on branch 'pre_release', and apparently I have amended the
# 44th commit before pre_release's HEAD.
# And on osmo-iuh, I have one un-pushed local commit.

-----------------------------------------------------------------------------

./e rm .version  # in each source tree, remove the local .version file

-----------------------------------------------------------------------------

./s         # interactively try to fast-forward to upstream and/or save
            # local modifications.
            # If you just hit Enter all the time, nothing will be changed.


libosmocore
master
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
Behind. git merge?  (empty = no, 'ok' = yes)
ok                   # <-- type 'ok' and hit enter
git merge
Updating ff932bb..4a29f34
Fast-forward
 include/osmocom/gprs/gprs_rlc.h | 25 +++++++++++++++++++
 include/osmocom/gsm/tlv.h       | 21 +++++++++++++++-
 src/gsm/gprs_rlc.c              | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/gsm/libosmogsm.map          |  6 +++++
 4 files changed, 141 insertions(+), 1 deletion(-)


libosmo-netif
master
Your branch is up-to-date with 'origin/master'.


libosmo-sccp
master
Your branch and 'origin/master' have diverged,
Diverged. git reset --hard origin/master ?  (empty = no, 'ok' = yes)
# a 'gitk' opens; just hit 'enter' to keep local diverged commits.
# If you type 'ok', local mods are saved to a wip branch first.

Local mods
  modified:   src/osmo_ss7_vty.c

commit to new branch? (enter name, empty = no)

commit to this branch master ?  (empty = no, 'ok' = yes)

[...]

-----------------------------------------------------------------------------


Enjoy,

~Neels
<nhofmeyr@sysmocom.de>
