[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