Hack the World!

プログラミングや,ネットワークに関する話題を取り扱っています.知識をつけて,優雅にお仕事するのを目指しています.

repoの解析と構築法

唐突にGerritの概要について発表をしてきた。


Gerrit(Got itの音を取ってるらしい)について今わかってるところまで発表してきました。

やっぱり、repoのドキュメントってないんだね。
あるのかもしれないけど、みんな見つけられてない。

と、いうわけで、@zaki50 さんもわざわざ見に来てくださったことだし、
repoの構築を最優先でやってみることになった。


まずは、source.android.kernel.orgを見てみる。
gitwebから見ると各レポジトリがフラットな構成に見えるが、
きっとディレクトリ構造になってるはずだ。

後、実はmanifest.gitですらレポジトリだったりする。

参考:
http://android.git.kernel.org/?p=platform/manifest.git;a=tree
http://android.git.kernel.org/platform/manifest.git/




また、repoのmanifest.xmlを眺めてみる。
スキーマがない。。解析しなければならないっぽい。
gitで落としてきたときと、syncし終わった後は若干形式が変わっている。



repo init 後


  
  

  
    
  
  
  
  

・
・
・




repo init && repo sync


  

  

  
  
  

・
・
・



変更される箇所は、project ノードのrevision 属性だ。
コレは落としてきたgitリポジトリのmasterのHEADなのかな?と思ったけど違うようだ。(保留)


またremoteノードは、全てのgitリポジトリに適用される、以下のコマンド相当だと思われる。

git remote add korg git://android.git.kernel.

これは合ってるようだ。

mydroid/sdk/.git/config

[remote "korg"]
  url = git://android.git.kernel.org/platform/sdk.git
  review = review.source.android.com
  projectname = platform/sdk
  fetch = +refs/heads/*:refs/remotes/korg/*

また、defaultノードの属性も反映されていることがわかる。
そして、projectsノードのname属性も反映されている。

これは、素直にrepo init直後のmanifest.xmlを配置してやれば何とかなりそうだ。

nameが、レポジトリの構成で、pathがsync後のworkspaceの状況っぽい

というわけで以下のようなレポジトリ配置を取ってみた。

repos/
 - manifest.git
 - test1.git
 - test2.git
 - test/
   - test3.git
   - test4.git


レポジトリにREADMEでも突っ込んで、pushまでやっておく必要がある。


そして、本命のmanifest.gitですが、直下にdefault.xmlを配置してやる。

中身はこんな感じ


  
  

   
   
   
   

 

これで、repo init -u miyabi@192.168.0.30:repos/manifests.git ;repo syncをやってみると、repoが動作しました。
結果はこんな感じ

予想通り、nameはworkspaceのpath相当、nameは、repositoryの配置だったみたい。(多分)

 .repo/
 - manifests/default.xml
 - manifest.xml  (勝手にコピーされてる)
 - manifests.git (git clone --bareされてる) 
 - project.list  (勝手に生成されてる)
 - projects      (各リポジトリのbare repositoryが配置されてる)
 a/
 - test1
 - test2
 test/
 - test3
 - test4



でもsyncの後にrevision追加されてなかった。。。
ブランチ切らなきゃダメなのかも?

でもrevision属性とreview属性の詳細はまだ謎。
copyfileノードは見たままだろう。
隠しノード的なものがあるのかもしれないけど、後はソースを読むしかないっぽい。
後は、後日

repoコマンドも合わせて調べていってもいいかもしれない。

CynagonModはgithubでrepoのリポジトリを提供してるし、色々使い方はありそうだ。
と、いうわけで @zaki50 さんに読んでもらって、添削してもらおう