annotate unique.d @ 696:fa8d1cf74ab8

added verbose listing to unique.d
author thomask
date Sun, 02 Oct 2005 20:55:57 +0000
parents 8907387e7a6a
children 8dc894322ce8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
1 module cn.kuehne.uniquefile;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
2
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
3 private import std.file;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
4 private import std.stdio;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
5 private import std.path;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
6
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
7 version(verbose){
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
8 FILE* msgStream = stderr;
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
9 }else{
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
10 FILE* msgStream = stdout;
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
11 }
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
12
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
13 private char[][char[]] known;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
14 private uint doppelgaenger;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
15
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
16 private char[] lastPathElem(char[] path){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
17 size_t end=path.length-1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
18 size_t start;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
19
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
20 for(end = path.length-1; path[end]==std.path.sep[0]; end--){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
21 if(end==0){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
22 return std.path.sep;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
23 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
24 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
25
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
26 for(start = end-1; start<start.max; start--){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
27 if(path[start]==std.path.sep[0]){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
28 break;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
29 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
30 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
31
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
32 if(start==start.max){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
33 start=0;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
34 }else{
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
35 start+=1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
36 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
37 return path[start .. end+1];
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
38 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
39
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
40 private void add(char[] file){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
41 char[] base = lastPathElem(file);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
42
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
43 if(isfile(file)){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
44 char[]* tmp = base in known;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
45 if(tmp){
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
46 fwritef(msgStream, "%s :\n\t%s\n\t%s\n", base, file, *tmp);
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
47 doppelgaenger++;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
48 }else{
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
49 known[base] = file;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
50 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
51 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
52
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
53 if(isdir(file) && (base[0]!='.')){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
54 foreach(char[] entry; listdir(file)){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
55 add(file~std.path.sep~entry);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
56 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
57 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
58 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
59
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
60 int main(char[][] args){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
61 if(args.length<2){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
62 fwritef(stderr, "at least one directory name is required as argument\n");
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
63 return -1;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
64 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
65
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
66 doppelgaenger = 0;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
67
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
68 foreach(char[] file; args[1 .. args.length]){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
69 if(file=="."){
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
70 file=getcwd();
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
71 }
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
72 add(file);
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
73 }
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
74
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
75 version(verbose){
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
76 foreach(char[] entry; known.keys.sort){
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
77 writef("\t%s\n", entry);
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
78 }
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
79 }
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
80
696
fa8d1cf74ab8 added verbose listing to unique.d
thomask
parents: 679
diff changeset
81 fwritef(msgStream, "hits : %s\n", doppelgaenger);
679
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
82
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
83 return doppelgaenger > 0;
8907387e7a6a doppelgaenger ....
thomask
parents:
diff changeset
84 }