backup-file — backup Interchange file


Attribute Pos. Req. Default Description
file Yes Yes File to back-up
interpolate     0 interpolate output?
hide     0 Hide the tag return value?


The tag allows backing up of Interchange files. Files are simply copied to the backup/ subdirectory of the catalog root directory (CATROOT).

File paths are preserved during copy; a target catalog file of say, pages/index.html would be saved to backup/pages/index.html.

You can copy filenames specified with absolute paths, and in fact, you can backup any file that the Interchange process can read.


This tag does not appear to be affected by, or affect, the rest of Interchange.


Example: Backing-up catalog index page

  [tmp name=backup set="[backup-file pages/index.html]" hide=1]
  [scratch ui_error]

Example: Backing-up system password file

  [tmp name=backup set="[backup-file /etc/passwd]" hide=1]
  [scratch ui_error]


The backup directory and the full pathname are automatically created if they don't already exist.


backup-file is available in Interchange versions:

4.6.0-5.9.0 (git-head)


Interchange 5.9.0:

Source: code/UI_Tag/backup_file.coretag
Lines: 47

# Copyright 2002-2007 Interchange Development Group and others
# 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 2 of the License, or
# (at your option) any later version.  See the LICENSE file for details.
# $Id: backup_file.coretag,v 1.5 2007-03-30 23:40:54 pajamian Exp $

UserTag backup-file Order     file
UserTag backup-file AddAttr
UserTag backup-file Version   $Revision: 1.5 $
UserTag backup-file Routine   <<EOR
require File::Copy;
require File::Path;
require File::Basename;
sub {
my ($file, $opt) = @_;
my $bu_file = "backup/$file";
$bu_file =~ s://+:/:g ;
$bu_file =~ m:(.*)/: ;
my $bu_dir = $1;
eval {
  die ::errmsg("Cannot figure out backup directory from %s", $bu_file)
    if ! $bu_dir;
  if (! -d $bu_dir) {
      or die ::errmsg("Cannot make backup directory %s: %s", $bu_dir, $!);
  if (-f $bu_file) {
    my $fn = $bu_file;
    $fn =~ s:.*/::;
    UI::Primitive::rotate($fn, { Directory => $bu_dir } )
      or die ::errmsg("Cannot make backup of %s: %s", $bu_file, $!);
#::logDebug("ready to copy $file to $bu_file");
  File::Copy::copy($file, $bu_file)
    or die ::errmsg("Copy %s to %s: %s", $file, $bu_file, $!);
if ($@) {
  $::Scratch->{ui_error} = $@;
  return undef;
return 1;


Interchange Development Group



DocBook! Interchange!