// // aegis - project change supervisor // Copyright (C) 1999, 2001-2006, 2008 Peter Miller // Copyright (C) 2006 Walter Franzini // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #include #include // for assert #include #include #include int change_file_up_to_date(project_ty *pp, fstate_src_ty *c_src_data) { fstate_src_ty *p_src_data; int result; // // No edit origin implies a new file, and is always // up-to-date. // trace(("change_file_up_to_date(pp = %08lX)\n{\n", (long)pp)); trace(("filename = \"%s\";\n", c_src_data->file_name->str_text)); assert(!c_src_data->edit || c_src_data->edit->revision); assert(!c_src_data->edit_origin || c_src_data->edit_origin->revision); if (!c_src_data->edit_origin) { trace(("return 1;\n")); trace(("}\n")); return 1; } // // Look for the file in the project. If it is not there, it // implies a new file, which is always up-to-date. // p_src_data = project_file_find(pp, c_src_data, view_path_extreme); if (!p_src_data || !p_src_data->edit) { trace(("return 1;\n")); trace(("}\n")); return 1; } // // The file is out-of-date if the edit number of the file in the // project is not the same as the edit number of the file when // originally copied from the project. // // p_src_data->edit // The head revision of the branch. // p_src_data->edit_origin // The version originally copied. // // c_src_data->edit // Not meaningful until after integrate pass. // c_src_data->edit_origin // The version originally copied. // c_src_data->edit_origin_new // Updates branch edit_origin on integrate pass. // assert(p_src_data->edit); assert(p_src_data->edit->revision); assert(c_src_data->edit_origin); assert(c_src_data->edit_origin->revision); result = ( ( // backwards compatibility !p_src_data->uuid || // backwards compatibility !c_src_data->uuid || // make sure the file hasn't been renamed in the mean time str_equal(p_src_data->uuid, c_src_data->uuid) ) && str_equal ( p_src_data->edit->revision, c_src_data->edit_origin->revision ) ); trace(("return %d;\n", result)); trace(("}\n")); return result; }