;;; datify.el
;; Copyright (C) 2006-2014 Davin Pearson
;; Author/Maintainer: Davin Max Pearson <http://davin.50webs.com>
;; Keywords: Cull Size Quota
;; Version: 1.0
;;; Commentary:
;; This file is not part of GNU Emacs.
;; This file puts timestamps on archive files based on the date that
;; the archive file was last modified.
;;; Limitation of Warranty
;; 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 GNU Emacs, see the file COPYING. If not, see:
;;
;; <http://www.gnu.org/licenses/gpl-3.0.txt>.
;;; Install Instructions:
;; See the following URL for the latest info and a tarball:
;;
;; <http://davin.50webs.com/research/2006/mopa2e.html#datify>
;;
;; Then untar the tarball to a folder pointed to by the Emacs variable
;; load-path and add the following line to your ~/.emacs file.
;;
;; (require 'datify)
;;; Known Bugs:
;; None!
;;; Code:
;; (setq filename "~/abc.tar")
;; (setq filename "cosc363-assignment-20081010-122731.zip")
;; (setq filename "~/foo.zip")
;; (setq ext "zip")
;;
(defun datify--file (filename)
;;(message "* inside datify--file filename = %s " filename)
(let (extension basename time)
(setq extension (cond
((string-match "\\.exe$" filename)
".exe")
((string-match "\\.tar\\.gz$" filename)
".tar.gz")
((string-match "\\.tar$" filename)
".tar")
((string-match "\\.zip$" filename)
".zip")
((string-match "\\.pdf$" filename)
".pdf")
(t
(error "must be a exe|tar|tar.gz|zip|pdf file"))))
(assert (string-match "\\.\\(exe\\|tar\\|tar.gz\\|zip\\|pdf\\)$" extension))
(assert (file-exists-p filename))
(setq time (nth 5 (file-attributes filename)))
;;(debug)
(if (not (string-match (concat bak--yyyymmdd bak--hhmmss (regexp-quote extension) "$") filename))
;; Y Y Y Y M M D D H H M M S S
;;(if (not (string-match (concat "[0-9][0-9][0-9][0-9]" "[0-9][0-9][0-9][0-9]" "-" "[0-9][0-9][0-9][0-9][0-9][0-9]\\."
(progn
(d-quote
;;
;; BOTE: sanity check
;;
(assert (string-match (concat "^[-a-zA-Z0-9.]*[a-zA-Z]+" (regexp-quote extension) "$")
(file-name-nondirectory filename))))
(progn
;;(debug)
(assert (string-match (concat "\\(.*\\)" (regexp-quote extension) "$") filename))
(setq basename (substring filename (match-beginning 1) (match-end 1)))
(rename-file filename
(concat basename "-" (d-time--decode-time-readable time) extension)
'OK-if-ALREADY-EXISTS))))))
;; (datify--dir (concat (bak-dir) "baz"))
;; (datify--dir "~/bak")
(defun datify--dir (&optional dirname)
(interactive)
(let (list ptr)
(if (and (eq dirname nil) (eq major-mode 'dired-mode))
(setq dirname default-directory))
(setq list (directory-files dirname t "\\.\\(exe\\|tar\\|tar\\.gz\\|zip\\|pdf\\)$"))
(setq ptr list)
(let ((i 0)
(len (length list)))
(while ptr
(incf i)
(message "datify--dir dirname=%s progress=%d%%" (prin1-to-string dirname) (/ (* 100 i) len))
(datify--file (car ptr))
(setq ptr (cdr ptr))
))
))
(defun datify ()
(interactive)
;;(d-time--update-timestamps)
(let ((dirname default-directory))
(assert (eq major-mode 'dired-mode))
(datify--dir dirname)))
(defun datify-bak-dir ()
(interactive)
(datify--dir (bak-dir)))
(provide 'datify)
| Back |