//
// aegis - project change supervisor
// Copyright (C) 1999, 2001-2008, 2014 Peter Miller
//
// 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
#include
//
// NAME
// change_history_trashed_fingerprints
//
// SYNOPSIS
// void change_history_trashed_fingerprints(change::pointer cp,
// string_list_ty *);
//
// DESCRIPTION
// Many history tools (e.g. RCS) can modify the contents of the file
// when it is committed. While there are usually options to turn
// this off, they are seldom used. The problem is: if the commit
// changes the file, the source in the repository now no longer
// matches the object file in the repository - i.e. the history
// tool has compromised the referential integrity of the repository.
//
// Check here if this is the case, and emit an error message if so.
// (It could be a fatal error, just a warning, or completely ignored,
// depending on the history_put_trashes_file field of the project
// config file.
//
void
change_history_trashed_fingerprints(const change::pointer &cp,
string_list_ty *slp)
{
pconf_ty *config;
size_t j;
sub_context_ty *scp;
if (slp->size() < 1)
return;
config = change_pconf_get(cp, 0);
if
(
config->history_put_trashes_file
==
pconf_history_put_trashes_file_ignore
)
return;
for (j = 0; j < slp->size(); ++j)
{
string_ty *fn;
fn = (*slp)[j];
scp = sub_context_new();
sub_var_set_string(scp, "File_Name", fn);
switch (config->history_put_trashes_file)
{
case pconf_history_put_trashes_file_ignore:
break;
case pconf_history_put_trashes_file_warn:
change_verbose
(
cp,
scp,
i18n("warning: $filename modified by history tool")
);
break;
case pconf_history_put_trashes_file_fatal:
change_error
(
cp,
scp,
i18n("$filename modified by history tool")
);
break;
}
sub_context_delete(scp);
}
scp = sub_context_new();
sub_var_set_long(scp, "Number", (long)slp->size());
sub_var_optional(scp, "Number");
switch (config->history_put_trashes_file)
{
case pconf_history_put_trashes_file_ignore:
break;
case pconf_history_put_trashes_file_warn:
change_verbose
(
cp,
scp,
i18n("warning: files modified by history tool")
);
break;
case pconf_history_put_trashes_file_fatal:
change_fatal(cp, scp, i18n("files modified by history tool"));
break;
}
sub_context_delete(scp);
}
// vim: set ts=8 sw=4 et :