+Wed Mar 19 14:06:40 1997 Jim Meyering <meyering@totoro.cyclic.com>
+
+ * configure.in (test for shadow passwords): Use AC_MSG_RESULT
+ rather than echo, so configure obeys --quiet.
+ Use yes and no in message rather than yup and nope.
+
+19 Mar 1997 Jim Kingdon
+
+ * cvsnt.mak: Now Visual C++ wants to add a bunch of dependencies
+ for the Release configuration as well as the Debug one. Why it
+ didn't do this before, I have no idea.
+
13 Mar 1997 Jim Kingdon
* cvsnt.mak: Recent changes have added a number of getline.h
# Begin Source File
SOURCE=.\src\mkmodules.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_MKMOD=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\mkmodules.obj" : $(SOURCE) $(DEP_CPP_MKMOD) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_MKMOD=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\subr.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_SUBR_=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\subr.obj" : $(SOURCE) $(DEP_CPP_SUBR_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_SUBR_=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\admin.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ADMIN=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\admin.obj" : $(SOURCE) $(DEP_CPP_ADMIN) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ADMIN=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\server.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_SERVE=\
+ ".\src\cvs.h"\
+ ".\src\watch.h"\
+ ".\src\edit.h"\
+ ".\src\fileattr.h"\
+ ".\lib\getline.h"\
+ ".\src\buffer.h"\
+ {$(INCLUDE)}"\sys\Types.h"\
+
+
+"$(INTDIR)\server.obj" : $(SOURCE) $(DEP_CPP_SERVE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_SERVE=\
".\src\cvs.h"\
".\src\watch.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\diff.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_DIFF_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\diff.obj" : $(SOURCE) $(DEP_CPP_DIFF_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_DIFF_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\client.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CLIEN=\
+ ".\windows-NT\config.h"\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+ ".\src\edit.h"\
+ ".\src\buffer.h"\
+ ".\lib\md5.h"\
+
+
+"$(INTDIR)\client.obj" : $(SOURCE) $(DEP_CPP_CLIEN) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CLIEN=\
".\windows-NT\config.h"\
".\src\cvs.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\checkout.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CHECK=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\checkout.obj" : $(SOURCE) $(DEP_CPP_CHECK) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CHECK=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\no_diff.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_NO_DI=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\no_diff.obj" : $(SOURCE) $(DEP_CPP_NO_DI) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_NO_DI=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\entries.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ENTRI=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\entries.obj" : $(SOURCE) $(DEP_CPP_ENTRI) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ENTRI=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\tag.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_TAG_C=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+
+
+"$(INTDIR)\tag.obj" : $(SOURCE) $(DEP_CPP_TAG_C) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_TAG_C=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\rtag.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RTAG_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\rtag.obj" : $(SOURCE) $(DEP_CPP_RTAG_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RTAG_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\status.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_STATU=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\status.obj" : $(SOURCE) $(DEP_CPP_STATU) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_STATU=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\root.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ROOT_=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\root.obj" : $(SOURCE) $(DEP_CPP_ROOT_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ROOT_=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\myndbm.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_MYNDB=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\myndbm.obj" : $(SOURCE) $(DEP_CPP_MYNDB) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_MYNDB=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\hash.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_HASH_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\hash.obj" : $(SOURCE) $(DEP_CPP_HASH_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_HASH_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\repos.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_REPOS=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\repos.obj" : $(SOURCE) $(DEP_CPP_REPOS) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_REPOS=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\parseinfo.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_PARSE=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\parseinfo.obj" : $(SOURCE) $(DEP_CPP_PARSE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_PARSE=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\vers_ts.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_VERS_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\vers_ts.obj" : $(SOURCE) $(DEP_CPP_VERS_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_VERS_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\checkin.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CHECKI=\
+ ".\src\cvs.h"\
+ ".\src\fileattr.h"\
+ ".\src\edit.h"\
+
+
+"$(INTDIR)\checkin.obj" : $(SOURCE) $(DEP_CPP_CHECKI) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CHECKI=\
".\src\cvs.h"\
".\src\fileattr.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\commit.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_COMMI=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+ ".\src\edit.h"\
+ ".\src\fileattr.h"\
+
+
+"$(INTDIR)\commit.obj" : $(SOURCE) $(DEP_CPP_COMMI) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_COMMI=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\version.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_VERSI=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\version.obj" : $(SOURCE) $(DEP_CPP_VERSI) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_VERSI=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\cvsrc.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CVSRC=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\cvsrc.obj" : $(SOURCE) $(DEP_CPP_CVSRC) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CVSRC=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\remove.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_REMOV=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\remove.obj" : $(SOURCE) $(DEP_CPP_REMOV) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_REMOV=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\update.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_UPDAT=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+ ".\lib\md5.h"\
+ ".\src\watch.h"\
+ ".\src\fileattr.h"\
+ ".\src\edit.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\update.obj" : $(SOURCE) $(DEP_CPP_UPDAT) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_UPDAT=\
".\src\cvs.h"\
".\lib\savecwd.h"\
".\lib\tcpip.h"\
-"$(INTDIR)\update.obj" : $(SOURCE) $(DEP_CPP_UPDAT) "$(INTDIR)"
+"$(INTDIR)\update.obj" : $(SOURCE) $(DEP_CPP_UPDAT) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\src\logmsg.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_LOGMS=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\logmsg.obj" : $(SOURCE) $(DEP_CPP_LOGMS) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
-# End Source File
-################################################################################
-# Begin Source File
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
-SOURCE=.\src\logmsg.c
DEP_CPP_LOGMS=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\classify.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CLASS=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\classify.obj" : $(SOURCE) $(DEP_CPP_CLASS) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CLASS=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\history.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_HISTO=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+
+
+"$(INTDIR)\history.obj" : $(SOURCE) $(DEP_CPP_HISTO) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_HISTO=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\add.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ADD_C=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+
+
+"$(INTDIR)\add.obj" : $(SOURCE) $(DEP_CPP_ADD_C) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ADD_C=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\lock.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_LOCK_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\lock.obj" : $(SOURCE) $(DEP_CPP_LOCK_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_LOCK_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\recurse.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RECUR=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+ ".\src\fileattr.h"\
+ ".\src\edit.h"\
+
+
+"$(INTDIR)\recurse.obj" : $(SOURCE) $(DEP_CPP_RECUR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RECUR=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\modules.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_MODUL=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+
+
+"$(INTDIR)\modules.obj" : $(SOURCE) $(DEP_CPP_MODUL) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_MODUL=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\find_names.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_FIND_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\find_names.obj" : $(SOURCE) $(DEP_CPP_FIND_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_FIND_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\rcs.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RCS_C=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\rcs.obj" : $(SOURCE) $(DEP_CPP_RCS_C) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RCS_C=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\create_adm.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_CREAT=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\create_adm.obj" : $(SOURCE) $(DEP_CPP_CREAT) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_CREAT=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\main.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_MAIN_=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_MAIN_=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\patch.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_PATCH=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\patch.obj" : $(SOURCE) $(DEP_CPP_PATCH) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_PATCH=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\release.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RELEA=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\release.obj" : $(SOURCE) $(DEP_CPP_RELEA) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RELEA=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\rcscmds.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RCSCM=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\rcscmds.obj" : $(SOURCE) $(DEP_CPP_RCSCM) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RCSCM=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\import.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_IMPOR=\
+ ".\src\cvs.h"\
+ ".\lib\savecwd.h"\
+
+
+"$(INTDIR)\import.obj" : $(SOURCE) $(DEP_CPP_IMPOR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_IMPOR=\
".\src\cvs.h"\
".\lib\savecwd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\ignore.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_IGNOR=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\ignore.obj" : $(SOURCE) $(DEP_CPP_IGNOR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_IGNOR=\
".\src\cvs.h"\
".\lib\getline.h"\
".\lib\tcpip.h"\
-"$(INTDIR)\ignore.obj" : $(SOURCE) $(DEP_CPP_IGNOR) "$(INTDIR)"
+"$(INTDIR)\ignore.obj" : $(SOURCE) $(DEP_CPP_IGNOR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\src\log.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_LOG_C=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\log.obj" : $(SOURCE) $(DEP_CPP_LOG_C) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
-# End Source File
-################################################################################
-# Begin Source File
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
-SOURCE=.\src\log.c
DEP_CPP_LOG_C=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\wrapper.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_WRAPP=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\wrapper.obj" : $(SOURCE) $(DEP_CPP_WRAPP) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_WRAPP=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\error.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ERROR=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\error.obj" : $(SOURCE) $(DEP_CPP_ERROR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ERROR=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\expand_path.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_EXPAN=\
+ ".\src\cvs.h"\
+ {$(INCLUDE)}"\sys\Types.h"\
+
+
+"$(INTDIR)\expand_path.obj" : $(SOURCE) $(DEP_CPP_EXPAN) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_EXPAN=\
".\src\cvs.h"\
{$(INCLUDE)}"\sys\Types.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\edit.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_EDIT_=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+ ".\src\watch.h"\
+ ".\src\edit.h"\
+ ".\src\fileattr.h"\
+
+
+"$(INTDIR)\edit.obj" : $(SOURCE) $(DEP_CPP_EDIT_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_EDIT_=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\fileattr.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_FILEA=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+ ".\src\fileattr.h"\
+
+
+"$(INTDIR)\fileattr.obj" : $(SOURCE) $(DEP_CPP_FILEA) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_FILEA=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\watch.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_WATCH=\
+ ".\src\cvs.h"\
+ ".\src\edit.h"\
+ ".\src\fileattr.h"\
+ ".\src\watch.h"\
+
+
+"$(INTDIR)\watch.obj" : $(SOURCE) $(DEP_CPP_WATCH) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_WATCH=\
".\src\cvs.h"\
".\src\edit.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\login.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_LOGIN=\
+ ".\src\cvs.h"\
+ ".\lib\getline.h"\
+
+
+"$(INTDIR)\login.obj" : $(SOURCE) $(DEP_CPP_LOGIN) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_LOGIN=\
".\src\cvs.h"\
".\lib\getline.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\scramble.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_SCRAM=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\scramble.obj" : $(SOURCE) $(DEP_CPP_SCRAM) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_SCRAM=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\buffer.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_BUFFE=\
+ ".\src\cvs.h"\
+ ".\src\buffer.h"\
+
+
+"$(INTDIR)\buffer.obj" : $(SOURCE) $(DEP_CPP_BUFFE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_BUFFE=\
".\src\cvs.h"\
".\src\buffer.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=.\src\zlib.c
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_ZLIB_=\
+ ".\src\cvs.h"\
+ ".\src\buffer.h"\
+ ".\zlib\zlib.h"\
+ ".\zlib\zconf.h"\
+
+
+"$(INTDIR)\zlib.obj" : $(SOURCE) $(DEP_CPP_ZLIB_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_ZLIB_=\
".\src\cvs.h"\
".\src\buffer.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
# Begin Source File
SOURCE=".\windows-NT\mkdir.c"
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_MKDIR=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\mkdir.obj" : $(SOURCE) $(DEP_CPP_MKDIR) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_MKDIR=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=".\windows-NT\run.c"
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RUN_C=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\run.obj" : $(SOURCE) $(DEP_CPP_RUN_C) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RUN_C=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
# Begin Source File
SOURCE=".\windows-NT\filesubr.c"
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_FILES=\
+ ".\src\cvs.h"\
+
+
+"$(INTDIR)\filesubr.obj" : $(SOURCE) $(DEP_CPP_FILES) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_FILES=\
".\src\cvs.h"\
".\windows-NT\config.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
# Begin Source File
SOURCE=".\windows-NT\rcmd.c"
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_RCMD_=\
+ ".\src\cvs.h"\
+ ".\windows-NT\rcmd.h"\
+
+
+"$(INTDIR)\rcmd.obj" : $(SOURCE) $(DEP_CPP_RCMD_) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_RCMD_=\
".\src\cvs.h"\
".\windows-NT\rcmd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
SOURCE=".\windows-NT\startserver.c"
+
+!IF "$(CFG)" == "cvsnt - Win32 Release"
+
+DEP_CPP_START=\
+ ".\src\cvs.h"\
+ ".\windows-NT\rcmd.h"\
+
+
+"$(INTDIR)\startserver.obj" : $(SOURCE) $(DEP_CPP_START) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "cvsnt - Win32 Debug"
+
DEP_CPP_START=\
".\src\cvs.h"\
".\windows-NT\rcmd.h"\
$(CPP) $(CPP_PROJ) $(SOURCE)
+!ENDIF
+
# End Source File
################################################################################
# Begin Source File
+Mon Mar 24 13:50:24 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * cvs.texinfo (Creating a branch): Add comment about -r in branch
+ example.
+
+ * cvsclient.texi (Responses): Discuss meaning of tagspec and
+ future expansion in Set-sticky. The behavior described is the one
+ which CVS has always implemented.
+
+Fri Mar 21 14:19:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * cvsclient.texi (Requests): Revise meaning of "Case" per change
+ to CVS.
+
+Tue Mar 18 15:50:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ The following reorganization hopefully presents numeric revisions
+ in a slightly more coherent fashion. The only new material is the
+ paragraph about assigning revisions for added files.
+ * cvs.texinfo (A sample session): Bring in a sentence from Basic
+ concepts node, defining a repository.
+ (Revisions and branches): Renamed from Branches (it has always
+ covered non-branch tags too). Bring in nodes "Revision numbers" and
+ "Versions revisions releases" from Basic concepts, the former in
+ particular was way too detailed for an intro section.
+ (A sample session): Add comment about how we need an introduction
+ and what might go into one. Also bring in the paragraph from
+ Basic concepts introducing modules, but comment it out.
+ (Viewing differences): Add comment about
+ (Basic concepts): Removed; its content has been farmed out as
+ described above, and as the comment said, it was fundamentally
+ flawed.
+ (Assigning revisions): New node. Incorporates the "New major
+ release number" subsubsec which was in "commit examples". Add
+ paragraph concerning how CVS assigns revisions on added files.
+ (commit options): Refer to that node under -r.
+ (Invoking CVS): Add comment about text for -r.
+
+Tue Mar 18 13:04:30 1997 Jim Meyering <meyering@totoro.cyclic.com>
+
+ * Makefile.in: (install-info): Depend on installdirs.
+
Sun Mar 16 12:37:12 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (File permissions): CVSUMASK now works for RCS
# in the build dir.
# (Note: don't solve this problem with "cd"; INSTALL_DATA might be a
# relative path to install-sh).
-install-info: info
+install-info: info installdirs
if test -f cvs.info ; then docdir=.; else docdir=$(srcdir);fi; \
for i in $$docdir/*.info* ; do \
$(INSTALL_DATA) $$i $(infodir)/`basename $$i` ; \
@menu
* Preface:: About this manual
* What is CVS?:: What is CVS?
-* Basic concepts:: Basic concepts of revision management
* A sample session:: A tour of basic CVS usage
* Repository:: Where all your sources are stored
* Starting a new project:: Starting a project with CVS
* Multiple developers:: How CVS helps a group of developers
-* Branches:: Parallel development explained
+* Revisions and branches:: Numeric, symbolic, and branch revisions
* Merging:: How to move changes between branches
* Recursive behavior:: CVS descends directories
* Adding files:: Adding files
only once they have been proven.
@end table
-@c ---------------------------------------------------------------------
-@node Basic concepts
-@chapter Basic concepts
-@cindex Modules (intro)
-
-@c This node doesn't know what it wants. We don't talk
-@c about *all* the concepts of CVS, just a few random ones
-@c which don't make any sense in isolation. Nor do we
-@c start with what a beginner most needs to know. We also
-@c jump into branches, which are a very advanced topic for
-@c this stage in the manual. I'd just nuke the node if
-@c I could figure out where this stuff should go instead.
-@c The real intro to the repository is in Repository
-@sc{cvs} stores all files in a centralized
-@dfn{repository} (@pxref{Repository}).
-
-The repository contains directories and files, in an
-arbitrary tree. The @dfn{modules} feature can be used
-to group together a set of directories or files into a
-single entity (@pxref{modules}). A typical usage is to
-define one module per project.
-
-@menu
-* Revision numbers:: The meaning of a revision number
-* Versions revisions releases:: Terminology used in this manual
-@end menu
-
-@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-@node Revision numbers
-@section Revision numbers
-@cindex Revision numbers
-@cindex Revision tree
-@cindex Linear development
-@cindex Number, revision-
-@cindex Decimal revision number
-@cindex Main trunk (intro)
-@cindex Branch number
-@cindex Number, branch
-
-Each version of a file has a unique @dfn{revision
-number}. Revision numbers look like @samp{1.1},
-@samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}.
-A revision number always has an even number of
-period-separated decimal integers. By default revision
-1.1 is the first revision of a file. Each successive
-revision is given a new number by increasing the
-rightmost number by one. The following figure displays
-a few revisions, with newer revisions to the right.
-
-@example
- +-----+ +-----+ +-----+ +-----+ +-----+
- ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
- +-----+ +-----+ +-----+ +-----+ +-----+
-@end example
-
-@sc{cvs} is not limited to linear development. The
-@dfn{revision tree} can be split into @dfn{branches},
-where each branch is a self-maintained line of
-development. Changes made on one branch can easily be
-moved back to the main trunk.
-
-Each branch has a @dfn{branch number}, consisting of an
-odd number of period-separated decimal integers. The
-branch number is created by appending an integer to the
-revision number where the corresponding branch forked
-off. Having branch numbers allows more than one branch
-to be forked off from a certain revision.
-
-@need 3500
-All revisions on a branch have revision numbers formed
-by appending an ordinal number to the branch number.
-The following figure illustrates branching with an
-example.
-
-@example
-@group
- +-------------+
- Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
- / +-------------+
- /
- /
- +---------+ +---------+ +---------+ +---------+
-Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !----! 1.2.2.4 !
- / +---------+ +---------+ +---------+ +---------+
- /
- /
-+-----+ +-----+ +-----+ +-----+ +-----+
-! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
-+-----+ +-----+ +-----+ +-----+ +-----+
- !
- !
- ! +---------+ +---------+ +---------+
-Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
- +---------+ +---------+ +---------+
-
-@end group
-@end example
-
-@c -- However, at least for me the figure is not enough. I suggest more
-@c -- text to accompany it. "A picture is worth a thousand words", so you
-@c -- have to make sure the reader notices the couple of hundred words
-@c -- *you* had in mind more than the others!
-
-@c -- Why an even number of segments? This section implies that this is
-@c -- how the main trunk is distinguished from branch roots, but you never
-@c -- explicitly say that this is the purpose of the [by itself rather
-@c -- surprising] restriction to an even number of segments.
-
-The exact details of how the branch number is
-constructed is not something you normally need to be
-concerned about, but here is how it works: When
-@sc{cvs} creates a branch number it picks the first
-unused even integer, starting with 2. So when you want
-to create a branch from revision 6.4 it will be
-numbered 6.4.2. All branch numbers ending in a zero
-(such as 6.4.0) are used internally by @sc{cvs}
-(@pxref{Magic branch numbers}). The branch 1.1.1 has a
-special meaning. @xref{Tracking sources}.
-
-@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-@node Versions revisions releases
-@section Versions, revisions and releases
-@cindex Revisions, versions and releases
-@cindex Versions, revisions and releases
-@cindex Releases, revisions and versions
-
-A file can have several versions, as described above.
-Likewise, a software product can have several versions.
-A software product is often given a version number such
-as @samp{4.1.1}.
-
-Versions in the first sense are called @dfn{revisions}
-in this document, and versions in the second sense are
-called @dfn{releases}. To avoid confusion, the word
-@dfn{version} is almost never used in this document.
-
@c ---------------------------------------------------------------------
@node A sample session
@chapter A sample session
@cindex tc, Trivial Compiler (example)
@cindex Trivial Compiler (example)
-This section describes a typical work-session using
-@sc{cvs}. It assumes that a repository is set up
-(@pxref{Repository}).
+@c I think an example is a pretty good way to start. But
+@c somewhere in here, maybe after the sample session,
+@c we need something which is kind of
+@c a "roadmap" which is more directed at sketching out
+@c the functionality of CVS and pointing people to
+@c various other parts of the manual. As it stands now
+@c people who read in order get dumped right into all
+@c manner of hair regarding remote repositories,
+@c creating a repository, etc.
+@c
+@c The following was in the old Basic concepts node. I don't
+@c know how good a job it does at introducing modules,
+@c or whether they need to be introduced so soon, but
+@c something of this sort might go into some
+@c introductory material somewhere.
+@ignore
+@cindex Modules (intro)
+The repository contains directories and files, in an
+arbitrary tree. The @dfn{modules} feature can be used
+to group together a set of directories or files into a
+single entity (@pxref{modules}). A typical usage is to
+define one module per project.
+@end ignore
+
+As a way of introducing @sc{cvs}, we'll go through a
+typical work-session using @sc{cvs}. The first thing
+to understand is that @sc{cvs} stores all files in a
+centralized @dfn{repository} (@pxref{Repository}); this
+section assumes that a repository is set up.
+@c I'm not sure that the sentence concerning the
+@c repository quite tells the user what they need to
+@c know at this point. Might need to expand on "centralized"
+@c slightly (maybe not here, maybe further down in the example?)
Suppose you are working on a simple compiler. The source
consists of a handful of C files and a @file{Makefile}.
that you checked out with your working copy. When you see the output
you remember that you added a command line option that enabled the
optimization pass. You check it in, and release the module.
+@c FIXME: we haven't yet defined the term "check in".
@example
$ cvs commit -m "Added an optimization pass" driver.c
checkout worlds.
@c ---------------------------------------------------------------------
-@node Branches
-@chapter Branches
+@node Revisions and branches
+@chapter Revisions and branches
@cindex Branches
@cindex Main trunk and branches
@cindex Revision tree, making branches
-So far, all revisions shown in this manual have been on
-the @dfn{main trunk}
-of the revision tree, i.e., all revision numbers
-have been of the form @var{x}.@var{y}. One useful
-feature, especially when maintaining several releases
-of a software product at once, is the ability to make
-branches on the revision tree. @dfn{Tags}, symbolic
-names for revisions, will also be
-introduced in this chapter.
+For many uses of @sc{cvs}, one doesn't need to worry
+too much about revision numbers; @sc{cvs} assigns
+numbers such as @code{1.1}, @code{1.2}, and so on, and
+that is all one needs to know. However, some people
+prefer to have more knowledge and control concerning
+how @sc{cvs} assigns revision numbers.
+
+If one wants to keep track of a set of revisions
+involving more than one file, such as which revisions
+went into a particular release, one uses a @dfn{tag},
+which is a symbolic revision which can be assigned to a
+numeric revision in each file.
+
+Another useful feature, especially when maintaining
+several releases of a software product at once, is the
+ability to make branches on the revision tree.
+@c FIXME: probably want another sentence or two, very
+@c briefly motivating branches.
@menu
+* Revision numbers:: The meaning of a revision number
+* Versions revisions releases:: Terminology used in this manual
+* Assigning revisions:: Assigning revisions
* Tags:: Tags--Symbolic revisions
* Branches motivation:: What branches are good for
* Creating a branch:: Creating a branch
* Sticky tags:: Sticky tags
@end menu
+@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+@node Revision numbers
+@section Revision numbers
+@cindex Revision numbers
+@cindex Revision tree
+@cindex Linear development
+@cindex Number, revision-
+@cindex Decimal revision number
+@cindex Main trunk (intro)
+@cindex Branch number
+@cindex Number, branch
+
+Each version of a file has a unique @dfn{revision
+number}. Revision numbers look like @samp{1.1},
+@samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}.
+A revision number always has an even number of
+period-separated decimal integers. By default revision
+1.1 is the first revision of a file. Each successive
+revision is given a new number by increasing the
+rightmost number by one. The following figure displays
+a few revisions, with newer revisions to the right.
+
+@example
+ +-----+ +-----+ +-----+ +-----+ +-----+
+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+ +-----+ +-----+ +-----+ +-----+ +-----+
+@end example
+
+@c Probably should move the following down a few
+@c sections, until after "branch motivation".
+@sc{cvs} is not limited to linear development. The
+@dfn{revision tree} can be split into @dfn{branches},
+where each branch is a self-maintained line of
+development. Changes made on one branch can easily be
+moved back to the main trunk.
+
+Each branch has a @dfn{branch number}, consisting of an
+odd number of period-separated decimal integers. The
+branch number is created by appending an integer to the
+revision number where the corresponding branch forked
+off. Having branch numbers allows more than one branch
+to be forked off from a certain revision.
+
+@need 3500
+All revisions on a branch have revision numbers formed
+by appending an ordinal number to the branch number.
+The following figure illustrates branching with an
+example.
+
+@example
+@group
+ +-------------+
+ Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
+ / +-------------+
+ /
+ /
+ +---------+ +---------+ +---------+ +---------+
+Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !----! 1.2.2.4 !
+ / +---------+ +---------+ +---------+ +---------+
+ /
+ /
++-----+ +-----+ +-----+ +-----+ +-----+
+! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
++-----+ +-----+ +-----+ +-----+ +-----+
+ !
+ !
+ ! +---------+ +---------+ +---------+
+Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
+ +---------+ +---------+ +---------+
+
+@end group
+@end example
+
+@c -- However, at least for me the figure is not enough. I suggest more
+@c -- text to accompany it. "A picture is worth a thousand words", so you
+@c -- have to make sure the reader notices the couple of hundred words
+@c -- *you* had in mind more than the others!
+
+@c -- Why an even number of segments? This section implies that this is
+@c -- how the main trunk is distinguished from branch roots, but you never
+@c -- explicitly say that this is the purpose of the [by itself rather
+@c -- surprising] restriction to an even number of segments.
+
+The exact details of how the branch number is
+constructed is not something you normally need to be
+concerned about, but here is how it works: When
+@sc{cvs} creates a branch number it picks the first
+unused even integer, starting with 2. So when you want
+to create a branch from revision 6.4 it will be
+numbered 6.4.2. All branch numbers ending in a zero
+(such as 6.4.0) are used internally by @sc{cvs}
+(@pxref{Magic branch numbers}). The branch 1.1.1 has a
+special meaning. @xref{Tracking sources}.
+
+@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+@node Versions revisions releases
+@section Versions, revisions and releases
+@cindex Revisions, versions and releases
+@cindex Versions, revisions and releases
+@cindex Releases, revisions and versions
+
+A file can have several versions, as described above.
+Likewise, a software product can have several versions.
+A software product is often given a version number such
+as @samp{4.1.1}.
+
+Versions in the first sense are called @dfn{revisions}
+in this document, and versions in the second sense are
+called @dfn{releases}. To avoid confusion, the word
+@dfn{version} is almost never used in this document.
+
+@node Assigning revisions
+@section Assigning revisions
+
+@c We avoid the "major revision" terminology. It seems
+@c like jargon. Hopefully "first number" is clear enough.
+By default, @sc{cvs} will assign numeric revisions by
+leaving the first number the same and incrementing the
+second number. For example, @code{1.1}, @code{1.2},
+@code{1.3}, etc.
+
+When adding a new file, the second number will always
+be one and the first number will equal the highest
+first number of any file in that directory. For
+example, the current directory contains files whose
+highest numbered revisions are @code{1.7}, @code{3.1},
+and @code{4.12}, then an added file will be given the
+numeric revision @code{4.1}.
+
+@c This is sort of redundant with something we said a
+@c while ago. Somewhere we need a better way of
+@c introducing how the first number can be anything
+@c except "1", perhaps. Also I don't think this
+@c presentation is clear on why we are discussing releases
+@c and first numbers of numeric revisions in the same
+@c breath.
+Normally there is no reason to care
+about the revision numbers---it is easier to treat them
+as internal numbers that @sc{cvs} maintains, and tags
+provide a better way to distinguish between things like
+release 1 versus release 2 of your product
+(@pxref{Tags}). However, if you want to set the
+numeric revisions, the @samp{-r} option to @code{cvs
+commit} can do that.
+
+For example, to bring all your files up to the @sc{rcs}
+revision 3.0 (including those that haven't changed),
+you might invoke:
+
+@c Why does this not require -f to get the "those that
+@c haven't changed" part? That isn't clear to me.
+@example
+$ cvs commit -r 3.0
+@end example
+
+Note that the number you specify with @samp{-r} must be
+larger than any existing revision number. That is, if
+revision 3.0 exists, you cannot @samp{cvs commit
+-r 1.3}. If you want to maintain several releases in
+parallel, you need to use a branch (@pxref{Revisions and branches}).
+
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node Tags
@section Tags--Symbolic revisions
module. @xref{rtag}. (You can also use the @code{tag}
command; @pxref{tag}).
+@c Why does this example use -r? That seems like a
+@c confusing thing to do in an example where we are
+@c introducing branches. One user thought it was
+@c a mandatory part of creating a branch for example.
+@c And we are not sufficiently
+@c "step by step" in terms of explaining
+@c what argument one should give to -r.
@example
$ cvs rtag -b -r release-1-0 release-1-0-patches tc
@end example
@end example
When you add a file it is added only on the branch
-which you are working on (@pxref{Branches}). You can
+which you are working on (@pxref{Revisions and branches}). You can
later merge the additions to another branch if you want
(@pxref{Merging adds and removals}).
@c Should we mention that earlier versions of CVS
@end example
When you remove a file it is removed only on the branch
-which you are working on (@pxref{Branches}). You can
+which you are working on (@pxref{Revisions and branches}). You can
later merge the removals to another branch if you want
(@pxref{Merging adds and removals}).
@item -r @var{revision}
Commit to @var{revision}. @var{revision} must be
either a branch, or a revision on the main trunk that
-is higher than any existing revision number. You
+is higher than any existing revision number
+(@pxref{Assigning revisions}). You
cannot commit to a specific revision on a branch.
+@c FIXME: Need xref for branch case.
@end table
@code{commit} also supports these options:
@node commit examples
@appendixsubsec commit examples
-@appendixsubsubsec New major release number
-
-@c "commit examples" seems like a bad place for this.
-@c What is the right place?
-By default, @sc{cvs} will assign numeric revisions by
-leaving the first number the same and incrementing the
-second number. For example, @code{1.1}, @code{1.2},
-@code{1.3}, etc. Normally there is no reason to care
-about the revision numbers---it is easier to treat them
-as internal numbers that @sc{cvs} maintains, and tags
-provide a better way to distinguish between things like
-release 1 versus release 2 of your product
-(@pxref{Tags}). However, if you want to set the
-numeric revisions, the @samp{-r} option to @code{cvs
-commit} can do that.
-
-For example, to bring all your files up to the @sc{rcs}
-revision 3.0 (including those that haven't changed),
-you might invoke:
-
-@example
-$ cvs commit -r 3.0
-@end example
-
-Note that the number you specify with @samp{-r} must be
-larger than any existing revision number. That is, if
-revision 3.0 exists, you cannot @samp{cvs commit
--r 1.3}. If you want to maintain several releases in
-parallel, you need to use a branch (@pxref{Branches}).
-
@appendixsubsubsec Committing to a branch
You can commit to a branch revision (one that has an
removed from the up-coming distribution).
@item -b
-Make the tag a branch tag. @xref{Branches}.
+Make the tag a branch tag. @xref{Revisions and branches}.
@item -d
Delete the tag instead of creating it.
@table @code
@item -b
The -b option makes the tag a branch tag
-(@pxref{Branches}), allowing concurrent, isolated
+(@pxref{Revisions and branches}), allowing concurrent, isolated
development. This is most useful for creating a patch
to a previously released software distribution.
@item -r @var{rev}
Commit to @var{rev}. See @ref{commit options}.
+@c FIXME: should be dragging over text from
+@c commit options, especially if it can be cleaned up
+@c and made concise enough.
@end table
@item diff [@var{options}] [@var{files}@dots{}]
@c requests, but isn't documented and should be.
@item Case \n
-Response expected: no.
-Tell the server that filenames should be matched against ignore patterns
-in a case-insensitive fashion. Note that this does not apply to other
-comparisons---for example the filenames given in @code{Entry} and
-@code{Modified} requests for the same file must match in case regardless
-of whether the @code{Case} request is sent.
+Response expected: no. Tell the server that filenames should be matched
+in a case-insensitive fashion. Note that this is not the primary
+mechanism for achieving case-insensitivity; for the most part the client
+keeps track of the case which the server wants to use and takes care to
+always use that case regardless of what the user specifies. For example
+the filenames given in @code{Entry} and @code{Modified} requests for the
+same file must match in case regardless of whether the @code{Case}
+request is sent. The latter mechanism is more general (it could also be
+used for 8.3 filenames, VMS filenames with more than one @samp{.}, and
+any other situation in which there is a predictable mapping between
+filenames in the working directory and filenames in the protocol), but
+there are some situations it cannot handle (ignore patterns, or
+situations where the user specifies a filename and the client does not
+know about that file).
@item Argument @var{text} \n
Response expected: no.
Additional data: @var{tagspec} \n. Tell the client to set a sticky tag
or date, which should be supplied with the @code{Sticky} request for
future operations. @var{pathname} ends in a slash; its purpose is to
-specify a directory, not a file within a directory. The first character
-of @var{tagspec} is @samp{T} for a tag, or @samp{D} for a date. The
+specify a directory, not a file within a directory. The client should
+store @var{tagspec} and pass it back to the server as-is, to allow for
+future expansion. The first character of @var{tagspec} is @samp{T} for
+a tag, @samp{D} for a date, or something else for future expansion. The
remainder of @var{tagspec} contains the actual tag or date.
@item Clear-sticky @var{pathname} \n
+Tue Mar 25 13:26:52 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * version.c: Version 1.9.6.
+
+Mon Mar 24 13:02:04 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * entries.c (ParseTag): Add comment about unrecognized characters
+ in CVS/Tag file.
+
+ * classify.c (Classify_File): Add comment about how specifying a
+ tag (bogusly?) suppresses certain messages.
+
+Fri Mar 21 13:37:46 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * rcs.h (struct rcsnode): Add comment about case of PATH.
+ * rcs.c (RCS_parse): If ign_case, then try opening the file with
+ fopen_case.
+ * ignore.c (ign_case): Adjust comment.
+ * cvs.h, filesubr.c (cvs_casecmp, fopen_case): New functions.
+
+20 Mar 1997 Jim Kingdon
+
+ * client.c (send_repository): When sending Directory request,
+ send any ISDIRSEP character as '/'. Fixes
+ "cvs log foo\bar\baz.c" on NT & friends.
+
+ * client.c (send_file_names): Don't try to read Entries file if
+ CVSADM directory does not exist. Fixes fairly serious regression
+ (warning on all fresh checkouts) introduced by 1997-01-08 change.
+
+Tue Mar 18 13:03:33 1997 Jim Meyering <meyering@totoro.cyclic.com>
+
+ * sanity.sh (RCSINIT): Define to be empty and export, to hide any
+ existing value that might cause spurious failures.
+
+ * Makefile.in: (install): Depend on installdirs.
+ Remove `CYGNUS LOCAL' comment saying not to.
+
+Tue Mar 18 09:36:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+
+ * recurse.c (struct recursion_frame): Reindent.
+ (do_dir_proc): Print message if we try to recurse into a CVSADM
+ directory.
+ * sanity.sh (basicb): New test basicb-4a tests for above fix.
+
Sun Mar 16 10:18:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
+ * sanity.sh (death2): Replace regexp matching temporary file name
+ with new variable ${tempname}. For most of the tests this is a
+ cosmetic change, but death2-diff-6 had been missing _ which caused
+ it to fail on Solaris (at least sometimes).
+
+ * sanity.sh (modes): Don't use export -n; it doesn't seem
+ to be sufficiently portable.
+
+ * version.c: Change version number to 1.9.5.
+
* version.c: Version 1.9.4.
* rcscmds.c (RCS_checkin): Preserve the mode of the rcsfile.
lint:
@cd ..; $(MAKE) lint SUBDIRS=src
-# CYGNUS LOCAL: Do not depend upon installdirs
-install:
+install: installdirs
@for prog in $(PROGS); do \
echo Installing $$prog in $(bindir); \
$(INSTALL) $$prog $(bindir)/$$prog ; \
if (vers->ts_user == NULL)
{
/* there is no user file */
+ /* FIXME: Why do we skip this message if vers->tag or
+ vers->date is set? It causes "cvs update -r tag98 foo"
+ to silently do nothing, which is seriously confusing
+ behavior. "cvs update foo" gives this message, which
+ is what I would expect. */
if (!force_tag_match || !(vers->tag || vers->date))
if (!really_quiet)
error (0, 0, "nothing known about %s", finfo->fullname);
else
{
/* there is a user file */
+ /* FIXME: Why do we skip this message if vers->tag or
+ vers->date is set? It causes "cvs update -r tag98 foo"
+ to silently do nothing, which is seriously confusing
+ behavior. "cvs update foo" gives this message, which
+ is what I would expect. */
if (!force_tag_match || !(vers->tag || vers->date))
if (!really_quiet)
error (0, 0, "use `cvs add' to create an entry for %s",
adm_name = xmalloc (strlen (dir) + 80);
send_to_server ("Directory ", 0);
- send_to_server (update_dir, 0);
+ {
+ /* Send the directory name. I know that this
+ sort of duplicates code elsewhere, but each
+ case seems slightly different... */
+ char buf[1];
+ char *p = update_dir;
+ while (*p != '\0')
+ {
+ assert (*p != '\012');
+ if (ISDIRSEP (*p))
+ {
+ buf[0] = '/';
+ send_to_server (buf, 1);
+ }
+ else
+ {
+ buf[0] = *p;
+ send_to_server (buf, 1);
+ }
+ ++p;
+ }
+ }
send_to_server ("\012", 1);
send_to_server (repos, 0);
send_to_server ("\012", 1);
/* For now just do this for files in the local
directory. Would be nice to handle the
non-local case too, though. */
- if (p == last_component (p))
+ /* The isdir check could more gracefully be replaced
+ with a way of having Entries_Open report back the
+ error to us and letting us ignore existence_error.
+ Or some such. */
+ if (p == last_component (p) && isdir (CVSADM))
{
List *entries;
Node *node;
*tagp = xstrdup (line + 1);
else if (*line == 'D' && datep)
*datep = xstrdup (line + 1);
+ /* if not 'T' or 'D' silently ignore it; it may have been
+ written by a future version of CVS which extends the
+ syntax. */
}
(void) fclose (fp);
free (line);
for (i = 0; i < argc; ++i)
(*pargv)[i] = xstrdup (argv[i]);
}
+
+#ifdef SERVER_SUPPORT
+/* Case-insensitive string compare. I know that some systems
+ have such a routine, but I'm not sure I see any reasons for
+ dealing with the hair of figuring out whether they do (I haven't
+ looked into whether this is a performance bottleneck; I would guess
+ not). */
+int
+cvs_casecmp (str1, str2)
+ char *str1;
+ char *str2;
+{
+ char *p;
+ char *q;
+ int pqdiff;
+
+ p = str1;
+ q = str2;
+ while ((pqdiff = tolower (*p) - tolower (*q)) == 0)
+ {
+ if (*p == '\0')
+ return 0;
+ ++p;
+ ++q;
+ }
+ return pqdiff;
+}
+
+/* Case-insensitive file open. As you can see, this is an expensive
+ call. We don't regard it as our main strategy for dealing with
+ case-insensitivity. Returns errno code or 0 for success. Puts the
+ new file in *FP. NAME and MODE are as for fopen. If PATHP is not
+ NULL, then put a malloc'd string containing the pathname as found
+ into *PATHP. Note that a malloc'd string is put into *PATHP
+ even if we return an error. It doesn't mean anything, but it still
+ must be freed.
+
+ Might be cleaner to separate the file finding (which just gives
+ *PATHP) from the file opening (which the caller can do). For one
+ thing, might make it easier to know whether to put NAME or *PATHP
+ into error messages. */
+int
+fopen_case (name, mode, fp, pathp)
+ char *name;
+ char *mode;
+ FILE **fp;
+ char **pathp;
+{
+ struct dirent *dp;
+ DIR *dirp;
+ char *dir;
+ char *fname;
+ char *found_name;
+ int retval;
+
+ /* Separate NAME into directory DIR and filename within the directory
+ FNAME. */
+ dir = xstrdup (name);
+ fname = strrchr (dir, '/');
+ if (fname == NULL)
+ error (1, 0, "internal error: relative pathname in fopen_case");
+ *fname++ = '\0';
+
+ found_name = NULL;
+ dirp = CVS_OPENDIR (dir);
+ if (dirp == NULL)
+ error (1, errno, "cannot read directory %s", dir);
+ errno = 0;
+ while ((dp = readdir (dirp)) != NULL)
+ {
+ if (cvs_casecmp (dp->d_name, fname) == 0)
+ {
+ if (found_name != NULL)
+ error (1, 0, "%s is ambiguous; could mean %s or %s",
+ fname, dp->d_name, found_name);
+ found_name = xstrdup (dp->d_name);
+ }
+ }
+ if (errno != 0)
+ error (1, errno, "cannot read directory %s", dir);
+ closedir (dirp);
+
+ if (found_name == NULL)
+ {
+ *fp = NULL;
+ retval = ENOENT;
+ }
+ else
+ {
+ char *p;
+
+ /* Copy the found name back into DIR. We are assuming that
+ found_name is the same length as fname, which is true as
+ long as the above code is just ignoring case and not other
+ aspects of filename syntax. */
+ p = dir + strlen (dir);
+ *p++ = '/';
+ strcpy (p, found_name);
+ *fp = fopen (dir, mode);
+ if (*fp == NULL)
+ retval = errno;
+ else
+ retval = 0;
+ }
+
+ if (pathp == NULL)
+ free (dir);
+ else
+ *pathp = dir;
+ free (found_name);
+ return retval;
+}
+#endif /* SERVER_SUPPORT */
#define whitespace(c) (spacetab[(unsigned char)c] != 0)
-/*
- * Parse an rcsfile given a user file name and a repository
- */
+/* Parse an rcsfile given a user file name and a repository. If there is
+ an error, we print an error message and return NULL. If the file
+ does not exist, we return NULL without printing anything (I'm not
+ sure this allows the caller to do anything reasonable, but it is
+ the current behavior). */
RCSNode *
RCS_parse (file, repos)
const char *file;
retval = NULL;
goto out;
}
+#if defined (SERVER_SUPPORT) && !defined (FILENAMES_CASE_INSENSITIVE)
+ else if (ign_case)
+ {
+ int status;
+ char *found_path;
+
+ /* The client might be asking for a file which we do have
+ (which the client doesn't know about), but for which the
+ filename case differs. We only consider this case if the
+ regular CVS_FOPENs fail, because fopen_case is such an
+ expensive call. */
+ (void) sprintf (rcsfile, "%s/%s%s", repos, file, RCSEXT);
+ status = fopen_case (rcsfile, "rb", &fp, &found_path);
+ if (status == 0)
+ {
+ rcs = RCS_parsercsfile_i (fp, rcsfile);
+ if (rcs != NULL)
+ rcs->flags |= VALID;
+
+ fclose (fp);
+ free (rcs->path);
+ rcs->path = found_path;
+ retval = rcs;
+ goto out;
+ }
+ else if (! existence_error (status))
+ {
+ error (0, status, "cannot open %s", rcsfile);
+ free (found_path);
+ retval = NULL;
+ goto out;
+ }
+ free (found_path);
+
+ (void) sprintf (rcsfile, "%s/%s/%s%s", repos, CVSATTIC, file, RCSEXT);
+ status = fopen_case (rcsfile, "rb", &fp, &found_path);
+ if (status == 0)
+ {
+ rcs = RCS_parsercsfile_i (fp, rcsfile);
+ if (rcs != NULL)
+ {
+ rcs->flags |= INATTIC;
+ rcs->flags |= VALID;
+ }
+
+ fclose (fp);
+ free (rcs->path);
+ rcs->path = found_path;
+ retval = rcs;
+ goto out;
+ }
+ else if (! existence_error (status))
+ {
+ error (0, status, "cannot open %s", rcsfile);
+ free (found_path);
+ retval = NULL;
+ goto out;
+ }
+ free (found_path);
+ }
+#endif
retval = NULL;
out:
{
int refcount;
int flags;
+
+ /* File name of the RCS file. This is not necessarily the name
+ as specified by the user, but it is a name which can be passed to
+ system calls and a name which is OK to print in error messages
+ (the various names might differ in case). */
char *path;
+
char *head;
char *branch;
char *symbols_data;
static List *dirlist = NULL; /* holds list of directories on which to operate */
struct recursion_frame {
- FILEPROC fileproc;
- FILESDONEPROC filesdoneproc;
- DIRENTPROC direntproc;
- DIRLEAVEPROC dirleaveproc;
- void *callerdat;
- Dtype flags;
- int which;
- int aflag;
- int readlock;
- int dosrcs;
+ FILEPROC fileproc;
+ FILESDONEPROC filesdoneproc;
+ DIRENTPROC direntproc;
+ DIRLEAVEPROC dirleaveproc;
+ void *callerdat;
+ Dtype flags;
+ int which;
+ int aflag;
+ int readlock;
+ int dosrcs;
};
static int do_recursion PROTO ((struct recursion_frame *frame));
struct saved_cwd cwd;
char *saved_update_dir;
+ if (fncmp (dir, CVSADM) == 0)
+ {
+ /* This seems to most often happen when users (beginning users,
+ generally), try "cvs ci *" or something similar. On that
+ theory, it is possible that we should just silently skip the
+ CVSADM directories, but on the other hand, using a wildcard
+ like this isn't necessarily a practice to encourage (it operates
+ only on files which exist in the working directory, unlike
+ regular CVS recursion). */
+
+ /* FIXME-reentrancy: printed_cvs_msg should be in a "command
+ struct" or some such, so that it gets cleared for each new
+ command (this is possible using the remote protocol and a
+ custom-written client). The struct recursion_frame is not
+ far back enough though, some commands (commit at least)
+ will call start_recursion several times. An alternate solution
+ would be to take this whole check and move it to a new function
+ validate_arguments or some such that all the commands call
+ and which snips the offending directory from the argc,argv
+ vector. */
+ static int printed_cvs_msg = 0;
+ if (!printed_cvs_msg)
+ {
+ error (0, 0, "warning: directory %s specified in argument",
+ dir);
+ error (0, 0, "\
+but CVS uses %s for its own purposes; skipping %s directory",
+ CVSADM, dir);
+ printed_cvs_msg = 1;
+ }
+ return 0;
+ }
+
saved_update_dir = update_dir;
update_dir = xmalloc (strlen (saved_update_dir)
+ strlen (dir)
# not allowed in usernames. Other than that I'm not sure.
username="[a-zA-Z0-9][a-zA-Z0-9]*"
+# Regexp to match the name of a temporary file (from cvs_temp_name).
+# This appears in certain diff output.
+tempname="[-a-zA-Z0-9/.%_]*"
+
# FIXME: try things (what things? checkins?) without -m.
#
# Some of these tests are written to expect -Q. But testing with
mkdir home
HOME=${TESTDIR}/home; export HOME
+# Make sure this variable is not defined to anything that would
+# change the format of rcs dates. Otherwise people using e.g.,
+# RCSINIT=-zLT get lots of spurious failures.
+RCSINIT=; export RCSINIT
+
# Remaining arguments are the names of tests to run.
#
# The testsuite is broken up into (hopefully manageably-sized)
dotest basicb-4 "${testcvs} add sfile2" \
"${PROG} [a-z]*: scheduling file .sfile2. for addition
${PROG} [a-z]*: use .cvs commit. to add this file permanently"
+ dotest basicb-4a "${testcvs} -q ci CVS" \
+"${PROG} [a-z]*: warning: directory CVS specified in argument
+${PROG} [a-z]*: but CVS uses CVS for its own purposes; skipping CVS directory"
cd ..
dotest basicb-5 "${testcvs} -q ci -m add" \
'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/sdir1/sfile1,v
===================================================================
RCS file: file1
diff -N file1
-\*\*\* [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+\*\*\* ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
--- /dev/null[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 1 \*\*\*\*
===================================================================
RCS file: file1
diff -N file1
-\*\*\* [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+\*\*\* ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
--- /dev/null[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 1 \*\*\*\*
===================================================================
RCS file: file1
diff -N file1
-\*\*\* [-a-zA-Z0-9/.%]*[ ][ ]*[a-zA-Z0-9: ]*
+\*\*\* ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
--- /dev/null[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 1 \*\*\*\*
RCS file: file1
diff -N file1
\*\*\* /dev/null[ ][ ]*[a-zA-Z0-9: ]*
---- [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+--- ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 0 \*\*\*\*
--- 1 ----
RCS file: file3
diff -N file3
\*\*\* /dev/null[ ][ ]*[a-zA-Z0-9: ]*
---- [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+--- ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 0 \*\*\*\*
--- 1 ----
RCS file: file2
diff -N file2
\*\*\* /dev/null[ ][ ]*[a-zA-Z0-9: ]*
---- [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+--- ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 0 \*\*\*\*
--- 1 ----
RCS file: file3
diff -N file3
\*\*\* /dev/null[ ][ ]*[a-zA-Z0-9: ]*
---- [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+--- ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 0 \*\*\*\*
--- 1 ----
RCS file: file1
diff -N file1
\*\*\* /dev/null[ ][ ]*[a-zA-Z0-9: ]*
---- [-a-zA-Z0-9/.%_]*[ ][ ]*[a-zA-Z0-9: ]*
+--- ${tempname}[ ][ ]*[a-zA-Z0-9: ]*
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*\*\* 0 \*\*\*\*
--- 1 ----
# such as whether a second user can check out the files. But
# it would be awkward to test the consequences, so we don't.
- export -n CVSUMASK # if unset, defaults to 002
+ # Solaris /bin/sh doesn't support export -n. I'm not sure
+ # what we can do about this, other than hope that whoever
+ # is running the tests doesn't have CVSUMASK set.
+ #export -n CVSUMASK # if unset, defaults to 002
+
umask 077
mkdir 1; cd 1
dotest modes-1 "${testcvs} -q co -l ." ''
#include "cvs.h"
-char *version_string = "\nConcurrent Versions System (CVS) 1.9.4";
+char *version_string = "\nConcurrent Versions System (CVS) 1.9.6";
#ifdef CLIENT_SUPPORT
#ifdef SERVER_SUPPORT
+21 Mar 1997 Jim Kingdon
+
+ * scc.c (SccCheckout): Write to debuglog and return
+ -11 instead of -14. I though maybe that this may be
+ related to the crashes I've been seeing, but those
+ crashes persisted when I deinstalled the SCC DLL.
+
14 Mar 1997 Jim Kingdon
* scc.c: Go back to using debuglog not outproc for
typedef long SCC_return;
#define SCC_return_success 0
#define SCC_return_unknown_project -2
+/* The file is not under SCC control. */
+#define SCC_return_non_scc_file -11
+/* This operation is not supported. I believe this status can only
+ be returned from SccGet, SccAdd, SccRemove, SccHistory, or
+ SccQueryInfo. I'm not really sure what happens if it is returned
+ from other calls. */
#define SCC_return_not_supported -14
#define SCC_return_non_specific_error -15
enum SCC_command
LPSTR *file_names, LPSTR comment, LONG options,
void *prov_options)
{
- return SCC_return_not_supported;
+ struct context *context = (struct context *)context_arg;
+ fprintf (context->debuglog, "SccCheckout num_files=%ld\n", num_files);
+ fflush (context->debuglog);
+ /* For the moment we say that all files are not ours. I'm not sure
+ whether this is ever necessary; that is, whether the IDE will call
+ us except where we have told the IDE that a file is under source
+ control. */
+ /* I'm not sure what we would do if num_files > 1 and we wanted to
+ return different statuses for different files. */
+ return SCC_return_non_scc_file;
}
/* cvs ci. */
+Tue Mar 18 13:05:37 1997 Jim Meyering <meyering@totoro.cyclic.com>
+
+ * Makefile.in (DISTFILES): Change glob pattern so that it doesn't
+ match `Makefile'. Add Make_vms.com explicitly.
+
1997-01-01 Fred Fish <fnf@ninemoons.com>
* Makefile.in (CC): Use @CC@ rather than hard coded "cc".
TEST_OBJS = example.o minigzip.o
# build_zlib.com added for CVS
-DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
- zlib.def zlib.rc algorithm.doc *.[ch] \
+DISTFILES = README INDEX ChangeLog configure Makefile.*[a-z0-9] Make_vms.com \
+ descrip.mms zlib.def zlib.rc algorithm.doc *.[ch] \
build_zlib.com
# For CVS, just build libz.a