home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
cvs-1.8.7-src.tgz
/
tar.out
/
fsf
/
cvs
/
src
/
create_adm.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-28
|
3KB
|
141 lines
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS 1.4 kit.
*
* Create Administration.
*
* Creates a CVS administration directory based on the argument repository; the
* "Entries" file is prefilled from the "initrecord" argument.
*/
#include "cvs.h"
/* update_dir includes dir as its last component. */
void
Create_Admin (dir, update_dir, repository, tag, date)
char *dir;
char *update_dir;
char *repository;
char *tag;
char *date;
{
FILE *fout;
char *cp;
char tmp[PATH_MAX];
#ifdef SERVER_SUPPORT
if (trace)
{
char wd[PATH_MAX];
getwd (wd);
fprintf (stderr, "%c-> Create_Admin (%s, %s, %s, %s, %s) in %s\n",
(server_active) ? 'S' : ' ',
dir, update_dir, repository, tag ? tag : "",
date ? date : "", wd);
}
#endif
if (noexec)
return;
if (dir != NULL)
(void) sprintf (tmp, "%s/%s", dir, CVSADM);
else
(void) strcpy (tmp, CVSADM);
if (isfile (tmp))
error (1, 0, "there is a version in %s already", update_dir);
make_directory (tmp);
/* record the current cvs root for later use */
Create_Root (dir, CVSroot_original);
if (dir != NULL)
(void) sprintf (tmp, "%s/%s", dir, CVSADM_REP);
else
(void) strcpy (tmp, CVSADM_REP);
fout = CVS_FOPEN (tmp, "w+");
if (fout == NULL)
{
if (update_dir[0] == '\0')
error (1, errno, "cannot open %s", tmp);
else
error (1, errno, "cannot open %s/%s", update_dir, CVSADM_REP);
}
cp = repository;
strip_path (cp);
#ifdef RELATIVE_REPOS
/*
* If the Repository file is to hold a relative path, try to strip off
* the leading CVSroot argument.
*/
if (CVSroot_directory != NULL)
{
char path[PATH_MAX];
(void) sprintf (path, "%s/", CVSroot_directory);
if (strncmp (repository, path, strlen (path)) == 0)
cp = repository + strlen (path);
}
#endif
if (fprintf (fout, "%s\n", cp) < 0)
{
if (update_dir[0] == '\0')
error (1, errno, "write to %s failed", tmp);
else
error (1, errno, "write to %s/%s failed", update_dir, CVSADM_REP);
}
if (fclose (fout) == EOF)
{
if (update_dir[0] == '\0')
error (1, errno, "cannot close %s", tmp);
else
error (1, errno, "cannot close %s/%s", update_dir, CVSADM_REP);
}
/* now, do the Entries file */
if (dir != NULL)
(void) sprintf (tmp, "%s/%s", dir, CVSADM_ENT);
else
(void) strcpy (tmp, CVSADM_ENT);
fout = CVS_FOPEN (tmp, "w+");
if (fout == NULL)
{
if (update_dir[0] == '\0')
error (1, errno, "cannot open %s", tmp);
else
error (1, errno, "cannot open %s/%s", update_dir, CVSADM_ENT);
}
if (fclose (fout) == EOF)
{
if (update_dir[0] == '\0')
error (1, errno, "cannot close %s", tmp);
else
error (1, errno, "cannot close %s/%s", update_dir, CVSADM_ENT);
}
/* Create a new CVS/Tag file */
WriteTag (dir, tag, date);
#ifdef SERVER_SUPPORT
if (server_active)
{
server_set_sticky (update_dir, repository, tag, date);
server_template (update_dir, repository);
}
if (trace)
{
fprintf (stderr, "%c<- Create_Admin\n",
(server_active) ? 'S' : ' ');
}
#endif
}