void git_upgrade () // Upgrades the git system. { // Go through the projects that have their git repository enabled. extern Settings * settings; vector <ustring> projects = projects_get_all (); for (unsigned int i = 0; i < projects.size(); i++) { ProjectConfiguration * projectconfig = settings->projectconfig (projects[i]); ustring git_directory = gw_build_filename (project_data_directory_project (projects[i]), ".git"); if (projectconfig->git_use_remote_repository_get()) { // At times there's a stale index.lock file that prevents any collaboration. // This is to be removed. ustring index_lock = gw_build_filename (git_directory, "index.lock"); if (g_file_test (index_lock.c_str(), G_FILE_TEST_IS_REGULAR)) { gw_message (_("Cleaning out index lock ") + index_lock); unix_unlink (index_lock.c_str()); } // Get the data directory for the project ustring datadirectory = tiny_project_data_directory_project(projects[i]); // On most machines git can determine the user's name from the system services. // On the XO machine, it can't. It is set here manually. // On more recent versions of git, like version 1.8.3 and younger, // although git may determine the user's name from the system, // it still requires it to be set manually. ustring command; command = "git config user.email \""; command.append(g_get_user_name()); command.append("@"); command.append(g_get_host_name()); command.append("\""); maintenance_register_shell_command (datadirectory, command); command = "git config user.name \""; command.append(g_get_real_name()); command.append("\""); maintenance_register_shell_command (datadirectory, command); // (Re)initialize the repository. This can be done repeatedly without harm. // Note that this is done on shutdown. maintenance_register_shell_command (datadirectory, "git init"); } else { if (g_file_test (git_directory.c_str(), G_FILE_TEST_IS_DIR)) { gw_message (_("Cleaning out folder ") + git_directory); ProgressWindow progresswindow (_("Tidying up project ") + projects[i], false); progresswindow.set_fraction (0.5); unix_rmdir (git_directory); } } } }
void RemoteRepositoryAssistant::on_assistant_prepare (GtkWidget *page) { extern Settings * settings; ProjectConfiguration *projectconfig = settings->projectconfig(bible); if (page == checkbutton_use_repository) { // Set all values in the GUI, according to the project configuration if it is a Bible, // or the general configuration for project notes. // Whether to use the remote repository. bool use_remote_repository = false; if (bible_notes_selector_bible ()) { use_remote_repository = projectconfig->git_use_remote_repository_get(); } else { use_remote_repository = settings->genconfig.consultation_notes_git_use_remote_repository_get(); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_use_repository), use_remote_repository); // Set the repository location. ustring repository_url; if (bible_notes_selector_bible ()) { repository_url = projectconfig->git_remote_repository_url_get(); } else { repository_url = settings->genconfig.consultation_notes_git_remote_repository_url_get(); } ignore_entry_repository_changed = true; gtk_entry_set_text (GTK_ENTRY (entry_repository), repository_url.c_str()); ignore_entry_repository_changed = false; } if (page == label_try_git) { // Prepare for the page to try git. if (!git_tried_and_okay) { git_tried_and_okay = try_git (); if (git_tried_and_okay) { gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label_try_git, true); } } } if (page == vbox_repository) { // Prepare for the page where the repository URL is set. gtk_widget_grab_focus (entry_repository); on_entry_repository(); } if (page == vbox_clone) { // Prepare for the page where the cloning is done. if (repository_url_get() != previously_cloned_url) { repository_unclone(); } gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), vbox_clone, repository_was_cloned()); if (!repository_was_cloned()) { gtk_label_set_text (GTK_LABEL (label_clone), ""); } } if (page == label_write_test) { // Prepare for the page for testing write access. if (!write_access_granted) { test_write_access (); } } }