]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/git/export
git/export: use 'date -f' instead of 'date -m'
[plan9front.git] / sys / src / cmd / git / export
1 #!/bin/rc
2 rfork ne
3 . /sys/lib/git/common.rc
4
5 patchname=/tmp/git.patchname.$pid
6 patchfile=/tmp/git.patchfile.$pid
7 fn sigexit{
8         rm -f $patchname $patchfile
9 }
10
11 gitup
12
13 flagfmt='o:patchdir patchdir'; args='[query]'
14 eval `''{aux/getflags $*} || exec aux/usage
15
16 if(~ $#patchdir 1 && ! test -d $patchdir)
17         mkdir -p $patchdir
18
19 q=$*
20 if(~ $#q 0)
21         q=HEAD
22 commits=`{git/query $q || die $status}
23 n=1
24 m=$#commits
25
26
27 # sleazy hack: we want to run
28 # under rfork m for the web ui,
29 # so don't error if we can't mount
30 mntgen /mnt/scratch >[2]/dev/null || status=''
31 for(c in $commits){
32         cp=`{git/query -p $c}
33         pp=`{git/query -p $c'~'}
34         fc=`$nl{git/query -c $c~ $c | sed 's/^..//'}
35
36         @{
37                 rfork n
38                 cd /mnt/scratch
39                 if(test -d $pp/tree)
40                         bind $pp/tree a
41                 if(test -d $cp/tree)
42                         bind $cp/tree b
43                 
44                 echo From: `{cat $cp/author}
45                 echo Date: `{date -uf'WW, DD MMM YYYY hh:mm:ss Z' `{walk -em $cp/author}}
46                 <$cp/msg awk '
47                 NR == 1 {
48                         n = ENVIRON["n"]
49                         m = ENVIRON["m"]
50                         msg=$0
51                         if(m > 1)
52                                 patch = sprintf("[PATCH %d/%d]", n, m)
53                         else
54                                 patch = "[PATCH]"
55                         printf "Subject: %s %s\n\n", patch, msg
56                         
57                         gsub("^[        ]|[     ]$", "", msg)
58                         gsub("[^a-zA-Z0-9_]+", "-", msg)
59                         printf "%.4d-%s.patch", n, msg >ENVIRON["patchname"]
60                         next
61                 }
62                 {
63                         print
64                 }'
65                 echo '---'
66                 echo diff `{basename $pp} `{basename $cp}
67                 for(f in $fc){
68                         a=a/$f
69                         if(! test -e $a)
70                                 a=/dev/null
71                         b=b/$f
72                         if(! test -e $b)
73                                 b=/dev/null
74                         ape/diff -urN $a $b
75                 }
76         } >$patchfile
77         if(~ $#patchdir 0){
78                 cat $patchfile
79                 ! ~ $n $m && echo
80         }
81         if not{
82                 f=$patchdir/`{cat $patchname}
83                 mv $patchfile $f
84                 echo $f
85         }
86         n=`{echo $n + 1 | bc}
87 }
88 exit ''