fled 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +459 -89
- data/bin/fled +341 -53
- data/lib/dtc/utils/exec.rb +13 -2
- data/lib/dtc/utils/interactive_edit.rb +10 -0
- data/lib/dtc/utils/meta.rb +47 -0
- data/lib/dtc/utils/text/html.rb +107 -0
- data/lib/dtc/utils/text/line_writer.rb +70 -0
- data/lib/dtc/utils/text.rb +23 -0
- data/lib/dtc/utils/visitor/dsl.rb +98 -0
- data/lib/dtc/utils/visitor/folder.rb +87 -0
- data/lib/dtc/utils/visitor.rb +272 -0
- data/lib/dtc/utils.rb +3 -1
- data/lib/fled/file_listing.rb +35 -62
- data/lib/fled/file_listing_builder.rb +43 -0
- data/lib/fled.rb +18 -5
- data/tests/helper.rb +14 -26
- data/tests/readme.rb +139 -85
- metadata +9 -3
- data/lib/dtc/utils/dsldsl.rb +0 -259
- data/lib/dtc/utils/file_visitor.rb +0 -79
data/README.md
CHANGED
@@ -71,38 +71,107 @@ Add options to a command (`mkdir`, `mv`, `rm` or `rmdir`)
|
|
71
71
|
folder_two/ :2
|
72
72
|
file_three :3
|
73
73
|
|
74
|
-
Each line of the listing is in the format
|
74
|
+
Each line of the listing is in the format `[indentation] name: uid`
|
75
75
|
|
76
76
|
- The *indentation* must consist of only spaces, and is used to indicate the parent folder
|
77
77
|
- The *name* must not use colons (`:`). If it is cleared, it is assumed the file/folder is to be deleted
|
78
|
+
The *name* has a `/` appended if it is a directory.
|
78
79
|
- The *uid* is used by FlEd to recognise the original of the edited line. Do not assume a *uid* does not
|
79
|
-
change between runs. It is valid only
|
80
|
+
change between runs. It is valid only for the current run. Spaces before the *uid* are only cosmetic.
|
80
81
|
|
81
82
|
## Operations
|
82
83
|
### Creating a new folder
|
83
84
|
|
84
85
|
Add a new line (therefore with no uid):
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
87
|
+
<table>
|
88
|
+
<tr>
|
89
|
+
<th>
|
90
|
+
<em>Original listing</em>
|
91
|
+
</th>
|
92
|
+
<th>
|
93
|
+
<em>Edited listing</em>
|
94
|
+
</th>
|
95
|
+
</tr>
|
96
|
+
<tr>
|
97
|
+
<td>
|
98
|
+
<pre>
|
99
|
+
folder/ :0
|
100
|
+
file_one :1
|
101
|
+
folder_two/ :2
|
102
|
+
file_three :3
|
103
|
+
</pre>
|
104
|
+
</td>
|
105
|
+
<td>
|
106
|
+
<pre>
|
107
|
+
folder/ :0
|
108
|
+
new_folder
|
109
|
+
folder_two/ :2
|
110
|
+
</pre>
|
111
|
+
</td>
|
112
|
+
</tr>
|
113
|
+
<tr>
|
114
|
+
<th colspan='2'>
|
115
|
+
<em>Generates the script:</em>
|
116
|
+
</th>
|
117
|
+
</tr>
|
118
|
+
<tr>
|
119
|
+
<td colspan='2'>
|
120
|
+
<ul>
|
121
|
+
<li>
|
122
|
+
<code>mkdir folder/new_folder</code>
|
123
|
+
</li>
|
124
|
+
</ul>
|
125
|
+
</td>
|
126
|
+
</tr>
|
127
|
+
</table>
|
93
128
|
|
94
129
|
### Moving
|
95
130
|
|
96
131
|
Change the indentation and/or line order to change the parent of a file or folder:
|
97
132
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
133
|
+
<table>
|
134
|
+
<tr>
|
135
|
+
<th>
|
136
|
+
<em>Original listing</em>
|
137
|
+
</th>
|
138
|
+
<th>
|
139
|
+
<em>Edited listing</em>
|
140
|
+
</th>
|
141
|
+
</tr>
|
142
|
+
<tr>
|
143
|
+
<td>
|
144
|
+
<pre>
|
145
|
+
folder/ :0
|
146
|
+
file_one :1
|
147
|
+
folder_two/ :2
|
148
|
+
file_three :3
|
149
|
+
</pre>
|
150
|
+
</td>
|
151
|
+
<td>
|
152
|
+
<pre>
|
153
|
+
folder/ :0
|
154
|
+
folder_two/ :2
|
155
|
+
file_one :1
|
156
|
+
file_three :3
|
157
|
+
</pre>
|
158
|
+
</td>
|
159
|
+
</tr>
|
160
|
+
<tr>
|
161
|
+
<th colspan='2'>
|
162
|
+
<em>Generates the script:</em>
|
163
|
+
</th>
|
164
|
+
</tr>
|
165
|
+
<tr>
|
166
|
+
<td colspan='2'>
|
167
|
+
<ul>
|
168
|
+
<li>
|
169
|
+
<code>mv folder/file_one folder/folder_two/file_one</code>
|
170
|
+
</li>
|
171
|
+
</ul>
|
172
|
+
</td>
|
173
|
+
</tr>
|
174
|
+
</table>
|
106
175
|
|
107
176
|
*Moving an item below itself or its children is not recommended, as the listing may not be exhaustive*
|
108
177
|
|
@@ -110,79 +179,293 @@ Generates:
|
|
110
179
|
|
111
180
|
Edit the name while preserving the uid to rename the item
|
112
181
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
182
|
+
<table>
|
183
|
+
<tr>
|
184
|
+
<th>
|
185
|
+
<em>Original listing</em>
|
186
|
+
</th>
|
187
|
+
<th>
|
188
|
+
<em>Edited listing</em>
|
189
|
+
</th>
|
190
|
+
</tr>
|
191
|
+
<tr>
|
192
|
+
<td>
|
193
|
+
<pre>
|
194
|
+
folder/ :0
|
195
|
+
file_one :1
|
196
|
+
folder_two/ :2
|
197
|
+
file_three :3
|
198
|
+
</pre>
|
199
|
+
</td>
|
200
|
+
<td>
|
201
|
+
<pre>
|
202
|
+
folder_renamed/ :0
|
203
|
+
file_one :1
|
204
|
+
folder_two/ :2
|
205
|
+
file_changed :3
|
206
|
+
</pre>
|
207
|
+
</td>
|
208
|
+
</tr>
|
209
|
+
<tr>
|
210
|
+
<th colspan='2'>
|
211
|
+
<em>Generates the script:</em>
|
212
|
+
</th>
|
213
|
+
</tr>
|
214
|
+
<tr>
|
215
|
+
<td colspan='2'>
|
216
|
+
<ul>
|
217
|
+
<li>
|
218
|
+
<code>mv folder folder_renamed</code>
|
219
|
+
</li>
|
220
|
+
<li>
|
221
|
+
<code>mv folder_renamed/folder_two/file_three folder_renamed/folder_two/file_changed</code>
|
222
|
+
</li>
|
223
|
+
</ul>
|
224
|
+
</td>
|
225
|
+
</tr>
|
226
|
+
</table>
|
124
227
|
|
125
228
|
### Deleting
|
126
229
|
|
127
230
|
Clear a name but leave the uid to delete that item
|
128
231
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
232
|
+
<table>
|
233
|
+
<tr>
|
234
|
+
<th>
|
235
|
+
<em>Original listing</em>
|
236
|
+
</th>
|
237
|
+
<th>
|
238
|
+
<em>Edited listing</em>
|
239
|
+
</th>
|
240
|
+
</tr>
|
241
|
+
<tr>
|
242
|
+
<td>
|
243
|
+
<pre>
|
244
|
+
folder/ :0
|
245
|
+
file_one :1
|
246
|
+
folder_two/ :2
|
247
|
+
file_three :3
|
248
|
+
</pre>
|
249
|
+
</td>
|
250
|
+
<td>
|
251
|
+
<pre>
|
252
|
+
folder_renamed/ :0
|
253
|
+
:1
|
254
|
+
:2
|
255
|
+
:3
|
256
|
+
</pre>
|
257
|
+
</td>
|
258
|
+
</tr>
|
259
|
+
<tr>
|
260
|
+
<th colspan='2'>
|
261
|
+
<em>Generates the script:</em>
|
262
|
+
</th>
|
263
|
+
</tr>
|
264
|
+
<tr>
|
265
|
+
<td colspan='2'>
|
266
|
+
<ul>
|
267
|
+
<li>
|
268
|
+
<code>mv folder folder_renamed</code>
|
269
|
+
</li>
|
270
|
+
<li>
|
271
|
+
<code>rm folder_renamed/folder_two/file_three</code>
|
272
|
+
</li>
|
273
|
+
<li>
|
274
|
+
<code>rm folder_renamed/file_one</code>
|
275
|
+
</li>
|
276
|
+
<li>
|
277
|
+
<code>rmdir folder_renamed/folder_two</code>
|
278
|
+
</li>
|
279
|
+
</ul>
|
280
|
+
</td>
|
281
|
+
</tr>
|
282
|
+
</table>
|
140
283
|
|
141
284
|
### No-op
|
142
285
|
|
143
286
|
If a line (and all child-lines) is removed from the listing, it will have no operation.
|
144
287
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
288
|
+
<table>
|
289
|
+
<tr>
|
290
|
+
<th>
|
291
|
+
<em>Original listing</em>
|
292
|
+
</th>
|
293
|
+
<th>
|
294
|
+
<em>Edited listing</em>
|
295
|
+
</th>
|
296
|
+
</tr>
|
297
|
+
<tr>
|
298
|
+
<td>
|
299
|
+
<pre>
|
300
|
+
folder/ :0
|
301
|
+
file_one :1
|
302
|
+
folder_two/ :2
|
303
|
+
file_three :3
|
304
|
+
</pre>
|
305
|
+
</td>
|
306
|
+
<td>
|
307
|
+
<pre>
|
308
|
+
folder/ :0
|
309
|
+
</pre>
|
310
|
+
</td>
|
311
|
+
</tr>
|
312
|
+
<tr>
|
313
|
+
<th colspan='2'>
|
314
|
+
<em>Generates the script:</em>
|
315
|
+
</th>
|
316
|
+
</tr>
|
317
|
+
<tr>
|
318
|
+
<td colspan='2'>
|
319
|
+
<em>No operation</em>
|
320
|
+
</td>
|
321
|
+
</tr>
|
322
|
+
</table>
|
149
323
|
|
150
324
|
*Note that removing a folder without removing its children will move its children:*
|
151
325
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
326
|
+
<table>
|
327
|
+
<tr>
|
328
|
+
<th>
|
329
|
+
<em>Original listing</em>
|
330
|
+
</th>
|
331
|
+
<th>
|
332
|
+
<em>Edited listing</em>
|
333
|
+
</th>
|
334
|
+
</tr>
|
335
|
+
<tr>
|
336
|
+
<td>
|
337
|
+
<pre>
|
338
|
+
folder/ :0
|
339
|
+
file_one :1
|
340
|
+
folder_two/ :2
|
341
|
+
file_three :3
|
342
|
+
</pre>
|
343
|
+
</td>
|
344
|
+
<td>
|
345
|
+
<pre>
|
346
|
+
folder/ :0
|
347
|
+
file_one :1
|
348
|
+
file_three :3
|
349
|
+
</pre>
|
350
|
+
</td>
|
351
|
+
</tr>
|
352
|
+
<tr>
|
353
|
+
<th colspan='2'>
|
354
|
+
<em>Generates the script:</em>
|
355
|
+
</th>
|
356
|
+
</tr>
|
357
|
+
<tr>
|
358
|
+
<td colspan='2'>
|
359
|
+
<ul>
|
360
|
+
<li>
|
361
|
+
<code>mv folder/folder_two/file_three folder/file_three</code>
|
362
|
+
</li>
|
363
|
+
</ul>
|
364
|
+
</td>
|
365
|
+
</tr>
|
366
|
+
</table>
|
160
367
|
|
161
368
|
If an indent is forgotten:
|
162
369
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
370
|
+
<table>
|
371
|
+
<tr>
|
372
|
+
<th>
|
373
|
+
<em>Original listing</em>
|
374
|
+
</th>
|
375
|
+
<th>
|
376
|
+
<em>Edited listing</em>
|
377
|
+
</th>
|
378
|
+
</tr>
|
379
|
+
<tr>
|
380
|
+
<td>
|
381
|
+
<pre>
|
382
|
+
folder/ :0
|
383
|
+
file_one :1
|
384
|
+
folder_two/ :2
|
385
|
+
file_three :3
|
386
|
+
</pre>
|
387
|
+
</td>
|
388
|
+
<td>
|
389
|
+
<pre>
|
390
|
+
folder/ :0
|
391
|
+
file_one :1
|
392
|
+
file_three :3
|
393
|
+
</pre>
|
394
|
+
</td>
|
395
|
+
</tr>
|
396
|
+
<tr>
|
397
|
+
<th colspan='2'>
|
398
|
+
<em>Generates the script:</em>
|
399
|
+
</th>
|
400
|
+
</tr>
|
401
|
+
<tr>
|
402
|
+
<td colspan='2'>
|
403
|
+
<ul>
|
404
|
+
<li>
|
405
|
+
<code>mv folder/folder_two/file_three folder/file_three</code>
|
406
|
+
</li>
|
407
|
+
</ul>
|
408
|
+
</td>
|
409
|
+
</tr>
|
410
|
+
</table>
|
170
411
|
|
171
412
|
### All together
|
172
413
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
414
|
+
<table>
|
415
|
+
<tr>
|
416
|
+
<th>
|
417
|
+
<em>Original listing</em>
|
418
|
+
</th>
|
419
|
+
<th>
|
420
|
+
<em>Edited listing</em>
|
421
|
+
</th>
|
422
|
+
</tr>
|
423
|
+
<tr>
|
424
|
+
<td>
|
425
|
+
<pre>
|
426
|
+
folder/ :0
|
427
|
+
file_one :1
|
428
|
+
folder_two/ :2
|
429
|
+
file_three :3
|
430
|
+
</pre>
|
431
|
+
</td>
|
432
|
+
<td>
|
433
|
+
<pre>
|
434
|
+
folder_new/ :0
|
435
|
+
new_folder/
|
436
|
+
first :1
|
437
|
+
second :3
|
438
|
+
:2
|
439
|
+
</pre>
|
440
|
+
</td>
|
441
|
+
</tr>
|
442
|
+
<tr>
|
443
|
+
<th colspan='2'>
|
444
|
+
<em>Generates the script:</em>
|
445
|
+
</th>
|
446
|
+
</tr>
|
447
|
+
<tr>
|
448
|
+
<td colspan='2'>
|
449
|
+
<ul>
|
450
|
+
<li>
|
451
|
+
<code>mv folder folder_new</code>
|
452
|
+
</li>
|
453
|
+
<li>
|
454
|
+
<code>mkdir folder_new/new_folder</code>
|
455
|
+
</li>
|
456
|
+
<li>
|
457
|
+
<code>mv folder_new/file_one folder_new/new_folder/first</code>
|
458
|
+
</li>
|
459
|
+
<li>
|
460
|
+
<code>mv folder_new/folder_two/file_three folder_new/new_folder/second</code>
|
461
|
+
</li>
|
462
|
+
<li>
|
463
|
+
<code>rmdir folder_new/folder_two</code>
|
464
|
+
</li>
|
465
|
+
</ul>
|
466
|
+
</td>
|
467
|
+
</tr>
|
468
|
+
</table>
|
186
469
|
|
187
470
|
## Edge cases
|
188
471
|
|
@@ -196,15 +479,54 @@ These sort-of work, but are still rather experimental
|
|
196
479
|
|
197
480
|
When applying
|
198
481
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
482
|
+
<table>
|
483
|
+
<tr>
|
484
|
+
<th>
|
485
|
+
<em>Original listing</em>
|
486
|
+
</th>
|
487
|
+
<th>
|
488
|
+
<em>Edited listing</em>
|
489
|
+
</th>
|
490
|
+
</tr>
|
491
|
+
<tr>
|
492
|
+
<td>
|
493
|
+
<pre>
|
494
|
+
folder/ :0
|
495
|
+
file_one :1
|
496
|
+
file_two :2
|
497
|
+
</pre>
|
498
|
+
</td>
|
499
|
+
<td>
|
500
|
+
<pre>
|
501
|
+
folder/ :0
|
502
|
+
file_two :1
|
503
|
+
file_one :2
|
504
|
+
</pre>
|
505
|
+
</td>
|
506
|
+
</tr>
|
507
|
+
<tr>
|
508
|
+
<th colspan='2'>
|
509
|
+
<em>Generates the script:</em>
|
510
|
+
</th>
|
511
|
+
</tr>
|
512
|
+
<tr>
|
513
|
+
<td colspan='2'>
|
514
|
+
<ul>
|
515
|
+
<li>
|
516
|
+
<code>mv folder/file_two folder/file_one.tmp</code>
|
517
|
+
</li>
|
518
|
+
<li>
|
519
|
+
<code>mv folder/file_one folder/file_two</code>
|
520
|
+
</li>
|
521
|
+
<li>
|
522
|
+
<code>mv folder/file_one.tmp folder/file_one</code>
|
523
|
+
</li>
|
524
|
+
</ul>
|
525
|
+
</td>
|
526
|
+
</tr>
|
527
|
+
</table>
|
204
528
|
|
205
|
-
|
206
|
-
mv folder/file_one folder/file_two
|
207
|
-
mv folder/file_one.tmp folder/file_one
|
529
|
+
*Swapping file names may not work in cases where the generated intermediary file exists but was not included in the listing*
|
208
530
|
|
209
531
|
### Tree swapping
|
210
532
|
|
@@ -215,19 +537,67 @@ Generates:
|
|
215
537
|
|
216
538
|
When applying
|
217
539
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
540
|
+
<table>
|
541
|
+
<tr>
|
542
|
+
<th>
|
543
|
+
<em>Original listing</em>
|
544
|
+
</th>
|
545
|
+
<th>
|
546
|
+
<em>Edited listing</em>
|
547
|
+
</th>
|
548
|
+
</tr>
|
549
|
+
<tr>
|
550
|
+
<td>
|
551
|
+
<pre>
|
552
|
+
folder/ :0
|
553
|
+
sub_folder/ :1
|
554
|
+
sub_sub_folder/ :2
|
555
|
+
file.txt :3
|
556
|
+
</pre>
|
557
|
+
</td>
|
558
|
+
<td>
|
559
|
+
<pre>
|
560
|
+
sub_sub_folder/ :2
|
561
|
+
sub_folder/ :1
|
562
|
+
folder/ :0
|
563
|
+
file.txt :3
|
564
|
+
</pre>
|
565
|
+
</td>
|
566
|
+
</tr>
|
567
|
+
<tr>
|
568
|
+
<th colspan='2'>
|
569
|
+
<em>Generates the script:</em>
|
570
|
+
</th>
|
571
|
+
</tr>
|
572
|
+
<tr>
|
573
|
+
<td colspan='2'>
|
574
|
+
<ul>
|
575
|
+
<li>
|
576
|
+
<code>mv folder/sub_folder/sub_sub_folder sub_sub_folder</code>
|
577
|
+
</li>
|
578
|
+
<li>
|
579
|
+
<code>mv folder/sub_folder sub_sub_folder/sub_folder</code>
|
580
|
+
</li>
|
581
|
+
<li>
|
582
|
+
<code>mv folder sub_sub_folder/sub_folder/folder</code>
|
583
|
+
</li>
|
584
|
+
<li>
|
585
|
+
<code>mv sub_sub_folder/file.txt sub_sub_folder/sub_folder/folder/file.txt</code>
|
586
|
+
</li>
|
587
|
+
</ul>
|
588
|
+
</td>
|
589
|
+
</tr>
|
590
|
+
</table>
|
222
591
|
|
223
|
-
|
592
|
+
## Changelog
|
224
593
|
|
225
|
-
|
226
|
-
mv folder/sub_folder sub_sub_folder/sub_folder
|
227
|
-
mv folder sub_sub_folder/sub_folder/folder
|
228
|
-
mv sub_sub_folder/file.txt sub_sub_folder/sub_folder/folder/file.txt
|
594
|
+
*Version v0.0.3*
|
229
595
|
|
230
|
-
|
596
|
+
- New: Interactive mode with `-u`
|
597
|
+
- New: Error and warning reporting with line numbers
|
598
|
+
- New: Default configuration file at `~/.fled.yaml`
|
599
|
+
- New: Editor and diff tool are configurable from configuration files
|
600
|
+
- Meta: Refactoring of code
|
231
601
|
|
232
602
|
*Version v0.0.2*
|
233
603
|
|