Git リポジトリを表示したり操作したりするアプリケーションをPerlで作成する方法について開設します。
(JUPO8FC"QQJEIBLPCFXJUI1FSM
View Slide
ࣗݾհ ͜ JEIBLPCF!IBLPCF גࣜձࣾͯͳΤϯδχΞ IUUQIBLPCFIBUFOBCMPHDPN Ξχϝ࠷࣮گΫϥελwΞχϝؔ͋Δͷ͜͜·Ͱ
(JUPO8FC"QQXJUI1FSM
HJU
(JUPO8FC"QQ (JUϦϙδτϦϒϥβ HJUIVC HJUXFC DHJU (JU-BC (JUB-JTU (JUPSJDJPVT
(JUϒϥβJO)BUFOB ͚ࣾ(JUϦϙδτϦϒϥβ DPNNJUEJ⒎Λ63-ͰࢦఆͰ͖ΔͷͰίʔυϨϏϡʔਐߦ֬ೝʹॏๅ 3VCZͰॻ͔ΕͯΔ࠷ۙϝϯς͕ ίʔυʹؔ͢Δใίϛϡχέʔγϣϯͱίʔυ͕ࢄ͕ͪ͠
)BUFOB$PEF'SJEHF ͚ࣾ(JUϦϙδτϦϒϥβ 1FSMͰ͔͔ΕͯΔʂϝϯςͰ͖Δ ϥϑʹίϛϡχέʔγϣϯͰ͖ͨΓ ߹॓Ͱ͍Ͱ࡞ͬͨ
(JUXJUI1FSM
ϓϩάϥϜ͔Βͷ(JU MJCHJU IUUQMJCHJUHJUIVCDPN $Ͱॻ͔Εͨ(JUૢ࡞ϥΠϒϥϦ lBWBJMBCMFBTCJOEJOHTGPSBMMNBKPSTDSJQUJOHMBOHVBHFTz3VCZ0CKFDUJWF$1ZUIPO/FU1)1-VB%FMQIJOPEFKTHP&SMBOHQBSSPU
1FSM͔Βͷ(JU HJUίϚϯυͷXSBQQFS ෦ͰHJUίϚϯυΛ࣮ߦ͢Δʂwεέʔϧͤ͞Δͷ͍͠wͱ͍͑ɺ͍͍ͩͨͳΜͰͰ͖Δ ͜Ε·Ͱͷࣾ(JUϦϙδτϦϒϥβշదʹ͑ͯΔ
1FSM͔Βͷ(JU❖Git.pm HJUʹଐͯ͠Δ $1"/Ϟδϡʔϧ͡Όͳ͍❖Git::Class/Git::Wrapper JOUFSBDUJWFͳίϚϯυ͕͑ͳ͍❖Git::Repository "1*͕γϯϓϧͰׂΓͬͯΔ JOUFSBDUJWFͳίϚϯυ͕͑ΔTFFIUUQTFBSDIDQBOPSHdCPPL(JU3FQPTJUPSZMJC(JU3FQPTJUPSZQN05)&3@1&3-@(*5@83"11&34
(JU3FQPTJUPSZ1 use Git::Repository;23 # ϦϙδτϦͷࢦఆ4 my $git;5 $git = Git::Repository->new(6 git_dif => '/path/to/.git' );7 $git = Git::Repository->new(8 work_tree => '/path/to/working_copy' );918
(JU3FQPTJUPSZ10 # ίϚϯυͷ࣮ߦ11 my $status = $git->run('status');12 my @diff = $git->run('diff', 'HEAD^...HEAD');1314 # ίϚϯυͷ࣮ߦ࣌ʹೖग़ྗΛ੍ޚ15 my $cmd = $git->command('add', '-p', '-u');16 $cmd->stdout;17 $cmd->stdin;18
(JU3FQPTJUPSZ ϦϙδτϦͷॴΛࢦఆ͢ΔͱHJUίϚϯυ͕࣮ߦͰ͖Δ SVODPNNBOE ࣮ߦ݁ՌࣗͰॲཧ͢Δ ݁ՌΛؾ߹ͰύʔεwSBXϞʔυͱ͔Λ׆༻
CSBODIS1 use Git::Repository;23 my $git;4 $git = Git::Repository->new(5 git_dif => '/path/to/.git' );67 my @branches =8 map { $_ =~ s/\s+//g; $_ }9 $self->git->run('branch', '-r');10origin/fix_bugorigin/workerenchanceorigin/xpath_entryimage
EJ⒎ ύʔεུ1 diff --git a/lib/Guita/Mapper/Git.pm b/lib/Guita/Mapper/Git.pm2 index 9ee4a36..5dd6ed5 1006443 --- a/lib/Guita/Mapper/Git.pm4 +++ b/lib/Guita/Mapper/Git.pm5 @@ -226,4 +226,9 @@ sub ls_tree {6 return $results;7 }89 +sub config {10 + my $self = shift;11 + $self->git->run('config', @_);12 +}13 +14 1;15 diff --git a/lib/Guita/Pick.pm b/lib/Guita/Pick.pm16 index 4c37820..29f75cb 10064417 --- a/lib/Guita/Pick.pm18 +++ b/lib/Guita/Pick.pm19 @@ -37,10 +37,14 @@ sub create {20 Guita::Git->run(init => $work_tree->stringify);
࣮ߦ݁Ռͷॲཧ (JU3FQPTJUPSZ1MVHJOΛ͏ HJUMPHͷΑ͏ͳϝιου͕Ճ ͦΜͳʹΓ্͕ͬͯͳ͍wMPHCMBNFͷΈ ඞཁʹԠͯࣗ͡Ͱॻ͘ ݁Ռͷѻ͍ΞϓϦέʔγϣϯґଘ
ࢀߟ SVCZHJU IUUQTHJUIVCDPNTDIBDPOSVCZHJU 3VCZͷHJUίϚϯυXSBQQFSܥͷϞδϡʔϧ
(VJUB❖Guita::Mapper::Git- add/commit/tree/blob/logs/diff/rev_parse/branch/cat_file/ls_tree (JU0CKFDUʹରԠ͢ΔΦϒδΣΫτwCMPCUSFFDPNNJUIUUQTHJUIVCDPNIBLPCF(VJUB
(VJUB HJTUDMPOF ͚ࣾHJTU΄͍͠͠࡞ͬͨ ̋1FSMͰॻ͔ΕͯΔ ✕MJCHJUͬͯͳ͍ ͍͍ͨͻͱ͓͓͔ͬͨΒؤுΓ͍ͨ σϞIUUQTHJUIVCDPNIBLPCF(VJUB
·ͱΊ (JUΛϓϩάϥϜ͔Βૢ࡞͍ͨ͠ ࣾ(JUϦϙδτϦ࡞Δͱ͔ MJCHJU1FSMͰ͑ͳ͍ (JUܥϞδϡʔϧ(JU3FQPTJUPSZ͓͢͢Ί (VJUB HJTUDMPOF ·ͣࣾͱ͔ͰͬͯΈΔ