[augeas-devel] [PATCH] Lens and transform for /etc/fstab
David Lutterkort
dlutter at redhat.com
Mon May 12 23:37:52 UTC 2008
# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1210635443 25200
# Node ID 81bbd9dc4af755860df6996a9dd2071304d085bb
# Parent 32df21b297f1b61b212a2e145f6240eebe954b7f
Lens and transform for /etc/fstab
The lens could be further refined by distinguishing between the legal
values in the first field (LABEL=xxx vs special file system vs device) and
by trying to model more of the vfs/option dependencies, but that's more of
a v2 feature.
diff -r 32df21b297f1 -r 81bbd9dc4af7 lenses/fstab.aug
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/fstab.aug Mon May 12 16:37:23 2008 -0700
@@ -0,0 +1,31 @@
+(* Parsing /etc/fstab *)
+
+module Fstab =
+ autoload xfm
+
+ let sep_tab = Util.del_ws_tab
+ let sep_spc = Util.del_ws_spc
+ let comma = Util.del_str ","
+ let eol = del /[ \t]*\n/ "\n"
+
+ let comment = [ del /#.*\n/ "# " ]
+ let word = /[^,# \n\t]+/
+ let record = [ seq "mntent" .
+ [ label "spec" . store word ] . sep_tab .
+ [ label "file" . store word ] . sep_tab .
+ [ label "vfstype" . store word ] . sep_tab .
+ [ label "opt" . store word ] .
+ ([comma . label "opt" . store word])* .
+ (sep_tab . [ label "dump" . store /[0-9]+/ ] .
+ ( sep_spc . [ label "passno" . store /[0-9]+/ ])? )?
+ . eol ]
+
+ let lns = ( comment | record ) *
+
+ let xfm = transform lns (incl "/etc/hosts")
+
+(* Local Variables: *)
+(* mode: caml *)
+(* End: *)
+
+
diff -r 32df21b297f1 -r 81bbd9dc4af7 lenses/tests/test_fstab.aug
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/tests/test_fstab.aug Mon May 12 16:37:23 2008 -0700
@@ -0,0 +1,63 @@
+module Test_fstab =
+
+ let simple = "/dev/vg00/lv00\t /\t ext3\t defaults 1 1\n"
+
+ let simple_tree =
+ { "1"
+ { "spec" = "/dev/vg00/lv00" }
+ { "file" = "/" }
+ { "vfstype" = "ext3" }
+ { "opt" = "defaults" }
+ { "dump" = "1" }
+ { "passno" = "1" } }
+
+ let trailing_ws = "/dev/vg00/lv00\t /\t ext3\t defaults 1 1 \t\n"
+
+ let no_passno = "LABEL=/boot\t /boot\t ext3\t defaults 1 \t\n"
+
+ let no_passno_tree =
+ { "1"
+ { "spec" = "LABEL=/boot" }
+ { "file" = "/boot" }
+ { "vfstype" = "ext3" }
+ { "opt" = "defaults" }
+ { "dump" = "1" } }
+
+ let no_dump = "/dev/vg00/lv00\t /\t ext3\t defaults\n"
+
+ let no_dump_tree =
+ { "1"
+ { "spec" = "/dev/vg00/lv00" }
+ { "file" = "/" }
+ { "vfstype" = "ext3" }
+ { "opt" = "defaults" } }
+
+
+ let multi_opts = "devpts\t /dev/pts\t devpts gid=5,mode=620 0 0\n"
+
+ let multi_opts_tree =
+ { "1"
+ { "spec" = "devpts" }
+ { "file" = "/dev/pts" }
+ { "vfstype" = "devpts" }
+ { "opt" = "gid=5" }
+ { "opt" = "mode=620" }
+ { "dump" = "0" }
+ { "passno" = "0" } }
+
+ test Fstab.lns get simple = simple_tree
+
+ test Fstab.lns get trailing_ws = simple_tree
+
+ test Fstab.lns get no_passno = no_passno_tree
+
+ test Fstab.lns put no_passno after set "1/passno" "1" =
+ "LABEL=/boot\t /boot\t ext3\t defaults\t1 1 \t\n"
+
+ test Fstab.lns get no_dump = no_dump_tree
+
+ test Fstab.lns get multi_opts = multi_opts_tree
+
+(* Local Variables: *)
+(* mode: caml *)
+(* End: *)
More information about the augeas-devel
mailing list