#!/usr/bin/fdscript
;; -*- Mode: fdscript; -*-

;;; $Id: reset-file-index.in,v 1.7 2002/06/01 21:12:06 haase Exp $

(use-module 'fdmaint)
(use-module 'fdinternals)

(define (main . arglist)
  (cond ((or (< nargs 2) (> nargs 3))
	 (lineout "Usage: reset-file-index <file index> [new size]"))
	((and (file-exists? arg1)  (file-writable? arg1))
	 (let* ((size (if (= nargs 3) (read-from-string arg2)
			(1- (index-size arg1))))
		(metadata (file-index-metadata arg1))
		(major-version (get metadata 'major-version))
		(locked-file (fopen-locked arg1 "rb")))
	   ;; Drop extraneous metadata slots
	   (do-choices (slotid '{major-version
				 minor-version
				 creation-timestamp
				 repack-timestamp
				 change-timestamp})
	     (drop! metadata slotid (get metadata slotid)))
	   ;; Check that it isn't locked
	   (fclose locked-file)
	   ;; There's a gap here that we won't worry about, when
	   ;;  someone could be locking it before we remove it.
	   (remove-file arg1)
	   (make-file-index
	    arg1 size (1+ major-version)
	    (if (= (choice-size (frame-slots metadata)) 0) (qc)
	      metadata))))
	((not (file-exists? arg1))
	 (lineout "The file " arg1 " does not exist"))
	(else
	 (lineout "The file " arg1 " cannot be written"))))

;;; $Log: reset-file-index.in,v $
;;; Revision 1.7  2002/06/01 21:12:06  haase
;;; Get major version from metadata before you delete it
;;;
;;; Revision 1.6  2002/04/28 02:25:31  haase
;;; Fixed bug with file index resetting
;;;
;;; Revision 1.5  2002/04/24 20:06:17  haase
;;; Made reset-file-index handle metadata better
;;;
;;; Revision 1.4  2002/04/10 03:02:10  haase
;;; Added version information to file pools and indices
;;;
;;; Revision 1.3  2002/04/02 21:43:06  haase
;;; Added Id and log entries to scripts
;;;
