<?php
# Copyright (c) 2010 John Reese
# Licensed under the MIT license
form_security_validate( 'plugin_Source_repo_import_full' );
access_ensure_global_level( plugin_config_get( 'manage_threshold' ) );
$f_repo_id = gpc_get_string( 'id' );
$t_repo = SourceRepo::load( $f_repo_id );
$t_vcs = SourceVCS::repo( $t_repo );
helper_ensure_confirmed( plugin_lang_get( 'ensure_import_full' ), plugin_lang_get( 'import_full' ) );
helper_begin_long_process();
html_page_top1();
html_page_top2();
# create a new, temporary repo
$t_new_repo = SourceRepo::load( $f_repo_id );
$t_new_repo->id = 0;
$t_new_repo->name = 'Import ' . date( 'Y-m-d H:i:s' );
$t_new_repo->save();
# keep checking for more changesets to import
$t_error = false;
while( true ) {
# import the next batch of changesets
$t_changesets = $t_vcs->import_full( $t_new_repo );
# check for errors
if ( !is_array( $t_changesets ) ) {
$t_error = true;
break;
}
# if no more entries, we're done
if ( count( $t_changesets ) < 1 ) {
break;
}
$t_new_repo->name = $t_repo->name;
Source_Process_Changesets( $t_changesets, $t_new_repo );
}
# if we errored, delete the new repo and stop
if ( $t_error ) {
SourceRepo::delete( $t_new_repo->id );
echo '<br/><div class="center">';
echo plugin_lang_get( 'import_full_failed' ), '<br/>';
print_bracket_link( plugin_page( 'repo_manage_page' ) . '&id=' . $t_repo->id, plugin_lang_get( 'back_repo' ) );
echo '</div>';
# otherwise, rename and save the new repo, then delete the old
} else {
$t_new_repo->save();
SourceRepo::delete( $t_repo->id );
$t_stats = $t_new_repo->stats();
echo '<br/><div class="center">';
echo sprintf( plugin_lang_get( 'import_stats' ), $t_stats['changesets'], $t_stats['files'], $t_stats['bugs'] ), '<br/>';
print_bracket_link( plugin_page( 'repo_manage_page' ) . '&id=' . $t_new_repo->id, plugin_lang_get( 'back_repo' ) );
echo '</div>';
}
form_security_purge( 'plugin_Source_repo_import_full' );
html_page_bottom1();