Jump to content
php.lv forumi
Sign in to follow this  
aaxc

SVN un PHP

Recommended Posts

Sveiki,

ir radusies maza problēma. Nesvarīgu iemeslu dēļ, ir nepieciešams izveidot weblapas veida svn update formu.

 

Atradu šo linku ( http://www.php.net/m...en/book.svn.php ), bet uz Windows mašīnas īsti nestrādā ( ja jums ir izdevies, tad droši padalamies pieredzē ).

Notestēju arī šo ( http://websvn.tigris.org/ ), bet tur nav iespējas svn update taisīt, kas manā gadījumā ir svarīgākais.

 

Tātad sāku pats ar primitīviem shell_exec tasīt augšā:

 

<?php

define ( SVN_DIR, 'c:\\svn\\server_dir' );

function svn_exec ( $cmd ) {

 $output.= trim ( shell_exec( $cmd . ' ' . SVN_DIR ) );

 return $output;

}

echo "<pre>";

echo svn_exec ( 'svn st' );
echo svn_exec ( 'svnversion' );

echo "</pre>";

?>

 

Tik tālu vis strādā smuki, bet kā ņemam ko "apjomīgāku", kā piemēram:

 

echo svn_exec ( 'svn log' );

 

Tā lapa vienkārši nofrīzo, jeb mēģina bezgalīgi ilgi lādēties ( pat timeout neiestājas ).

 

Jautājums elementārs, vai ir kāds ir ko tādu taisījis un ja jā, tad lūgums padalīties ar pieredzi un risinājumu.

 

Jau iepriekš pateicos.

 

 

Papildinfo: Uzgāju vēl šādu rakstu:

 

1. Man ir uzliktas Full control pravas uz viesiem folderiem un failiem ( tai skaitā hidden ).

2. Man ir viens svn clients ( Tortoise ) klikšķināšanai un paralēli shell komandām otrs ( Slik ). Bet tā kā Tortoise neatbalsta shell komandas, tad no šī viedokļ tikai viens klients.

Edited by aaxc

Share this post


Link to post
Share on other sites

Šajā gadījumā tas pilnibā nav svarīgi. Skaidrs zināms, ka tur vienkārši timeout iestāsies tik un tā. Shellā scripts izpildās instanti ( nu labi +- 50ms ), tāka problēma ir kur citur.

Share this post


Link to post
Share on other sites

Visdrīzāk problēma ir tajā, ka uz izpildes laiku php tiek nobloķēts līdz tiek izpildīta komanda.

Tā atrisināšanai var mēģināt: http://it.php.net/ma...ction.popen.php

Notestēju, tieši tas pats.

 

Vot nesaprotu, kāpēc es varu izpildīt principā visas komandas caur shell izņemot specifiskus svn pieprasiijumus...

Share this post


Link to post
Share on other sites

Papildinfo: Uzgāju vēl šādu rakstu:

 

1. Man ir uzliktas Full control pravas uz viesiem folderiem un failiem ( tai skaitā hidden ).

2. Man ir viens svn clients ( Tortoise ) klikšķināšanai un paralēli shell komandām otrs ( Slik ). Bet tā kā Tortoise neatbalsta shell komandas, tad no šī viedokļ tikai viens klients.

Share this post


Link to post
Share on other sites

Varbūt ir vērs pamēģināt kādu city exec komandu? kaut vai exec vai system?

 

Es gan nezinu kā ir uz windows, bet vēl varētu pamēģināt šitā

exec('svn log > tmp_file');

 

Un pēc tam taisīt ajax pieprasījumus un pārbaudīt if(is_file('tmp_file')) {//super logs atnācis}else{//atkartojam ajaxu!}

Share this post


Link to post
Share on other sites

Notestēju, tieši tas pats.

 

Testēji ar visu ciklisku datu lasīšanu no file handlera un regulāru php output bufera flush-ošanu?

Share this post


Link to post
Share on other sites

Tas svn nemēģina nolasīt kādus konfigus no user foldera, bet PHP nepietiek tiesību? Vispār laid caur CLI vai apache?

Share this post


Link to post
Share on other sites

Problēma atrisināta, vajadzēja pievienot --non-interactive parametru un vis aiziet pa smuko:

 

<?php

function svn_exec ( $cmd, $log_file = false ) {

$log = "";
if ( $log_file ) $log = ' > ' . $log_file;

if ( $_REQUEST['debug'] ) echo '<p style="color: blue;">' . $cmd . ' ' . SVN_DIR . '</p>';

if ( $svn_result = shell_exec( $cmd . ' ' . SVN_DIR . $log ) ) {
 $result = "Success:\n\n" . $svn_result;
 //echo "<code>" . ( str_replace ( array('<','>', "\n"), array('<','>', '<br />'), $svn_result ) ) . "</code>";
} else {
 $result = 'Fail';
}

return $result;

}

echo "<pre>";

echo svn_exec ( 'svn --non-interactive log --xml --quiet' );

echo "</pre>";

?>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...