(no commit message)
[ikiwiki.git] / doc / forum / How_does_ikiwiki_remember_times__63__.mdwn
1 This is similar to the last post in this forum. I want to know exactly how ikiwiki remembers the times associated with pages, especially when using it for blogging, so I know whether I can trust it or not. From that last thread, I think what ikiwiki does is this:
2
3 *   The created time of a file is when that file was first committed into the versioning repository (in my case git)
4
5     > If `--getctime` it used, yes. In normal operation, when new files
6     > are added, ikiwiki sets the creation time to the ctime of the file
7     > on disk, rather than bothering to ask the VCS. --[[Joey]] 
8
9 *   The modified time of a file is what that file was last updated in the repository
10
11     > Almost right, the modified time is actually taken from the
12     > modification time of the file in disk. --[[Joey]] 
13
14 And with a blog, by default, the posts are ordered by creation time, although an option can order them by modified time.
15
16 Okay. So this should mean that the times are safe if, for example, I delete my working copy and then clone another one from the bare git repository, or otherwise mess up the creation times and mtimes stored as file metadata on the filesystem.
17
18 Do I have it right?
19
20 > Some VCS, like git, set the file mtimes to the current time
21 > when making a new checkout, so they will be lost if you do that.
22 > The creation times can be retrived using the `--getctime` option.
23 > I suppose it might be nice if there were a `--getmtime` that pulled
24 > true modification times out of the VCS, but I haven't found it a big
25 > deal in practice for the last modification times to be updated to the
26 > current time when rebuilding a wiki like this. --[[Joey]] 
27 >
28 > > Thanks for the clarification. I ran some tests of my own to make sure I understand it right, and I'm satisfied
29 > > that the order of posts in my blog can be retrieved from the VCS using the `--getctime` option, at least if I
30 > > choose to order my posts by creation time rather than modification time. But I now know that I can't rely on
31 > > page modification times in ikiwiki as these can be lost permanently.
32 > >
33 > > I would suggest that there should at least be a `--getmtime` option like you describe, and perhaps that 
34 > > `--getctime` and `--getmtime` be _on by default_. In my opinion the creation times and modification times of 
35 > > pages in ikiwiki are part of the user's content and are important to protect, because the user may be relying 
36 > > on them, especially if they use blogging or lists of recently modified pages, etc. Right now the modification
37 > > times can be lost permanently.
38 > >
39 > > Is there a typo in the description of `--getctime` in the man page?
40 > >
41 > > > --getctime
42 > > > Pull  **last  changed  time**  for each new page out of the revision
43 > > > control system. This rarely used option provides a  way  to  get
44 > > > the real creation times of items in weblogs, such as when buildā€
45 > > > ing a wiki from a new Subversion checkout. It is unoptimised and
46 > > > quite  slow. It is best used with --rebuild, to force ikiwiki to
47 > > > get the ctime for all pages.
48 > >
49 > > Surely it is not the _last changed time_ but the _first seen time_ of each page that is pulled out of the VCS?
50 > > If the aim is to get the real creation times of items in weblogs, then the last times that the items were
51 > > changed in the VCS is not going to help. -- [[seanh]]
52 >>> Typo, fixed. --[[Joey]] 
53
54 > > > If you want to preserve the date of a page, the best way to do it is to
55 > > > use [[ikiwiki/directive/meta]] date="foo". This will survive checkouts,
56 > > > VCS migrations, etc. -- [[Jon]]
57 > > >
58 > > > > That's a good tip Jon. That would also survive renaming a page by renaming its mdwn file, which would 
59 > > > > normally lose the times also. (And in that case I think both times are irretrievable, even by 
60 > > > > `--getctime`). I might start using a simple script to make blog posts that creates a file for
61 > > > > me, puts today's date in the file as a meta, and opens the file in my editor.  -- [[seanh]]
62
63 >>>>> I use a script that does that and also sets up templates and tags
64 >>>>> for a new item:
65
66     #!/bin/sh
67     set -u
68     set -e
69
70     if [ $# -ne 1 ]; then
71         echo usage: $0 pagename >&2
72         exit 1
73     fi
74
75     pagename="$1"
76
77     if [ -e "$pagename" ]; then
78         echo error: "$pagename" exists >&2
79             exit 1
80     fi
81
82     date=$(date)
83     echo '\[[!template id=draft]]' >> "$pagename"
84     echo "\[[!meta date=\"$date\"]]" >> "$pagename"
85     echo "\[[!tag draft]]" >> "$pagename"
86     git add "$pagename"
87     $EDITOR "$pagename"
88
89 >>>>> -- [[Jon]]
90
91 > A quick workaround for me to get modification times right is the following
92 > little zsh script, which unfortunately only works for git:
93
94     #!/usr/bin/env zsh
95     
96     set +x
97     
98     for FILE in **/*(.); do
99       TIMES="`git log --pretty=format:%ai $FILE`"
100       MTIME="`echo $TIMES | head -n1`"
101     
102       if [ ! -z $MTIME ]; then
103         echo  touch -m -d "$MTIME" $FILE
104         touch -m -d "$MTIME" $FILE
105       fi
106     
107     done
108
109 > --[[David_Riebenbauer]]