Merge "Change ginstall to not write bootloaders to older GFHD254s."
diff --git a/ginstall/ginstall.py b/ginstall/ginstall.py
index c53f1af..1d233c6 100755
--- a/ginstall/ginstall.py
+++ b/ginstall/ginstall.py
@@ -72,6 +72,7 @@
     'SYSBLOCK': '/sys/block',
     'MMCBLK0BOOT0': '/dev/mmcblk0boot0',
     'MMCBLK0BOOT1': '/dev/mmcblk0boot1',
+    'MEMINFO': '/proc/meminfo',
 }
 
 MMC_RO_LOCK = {
@@ -132,6 +133,16 @@
   return open(F['ETCVERSION']).read().strip()
 
 
+def GetMemTotal():
+  total = open(F['MEMINFO']).readline()
+  total = total.split(' ')
+  total = filter(None, total)
+  if len(total) != 3:
+    print 'Error parsing /proc/meminfo'
+    return 0
+  return 1024 * int(total[1])
+
+
 def GetInternalHarddisk():
   for blkdev in sorted(glob.glob(F['SYSBLOCK'] + '/sd?')):
     dev_path = os.path.realpath(blkdev + '/device')
@@ -760,6 +771,9 @@
   Raises:
     Fatal: if install fails
   """
+  if GetPlatform() == 'GFHD254' and GetMemTotal() < 4*1e9:
+    print 'Skipping bootloader on 2GB lockdown.'
+    return
 
   loader_start = loader.filelike.tell()
   installed = False
diff --git a/ginstall/ginstall_test.py b/ginstall/ginstall_test.py
index 928cf58..8deac64 100755
--- a/ginstall/ginstall_test.py
+++ b/ginstall/ginstall_test.py
@@ -357,5 +357,14 @@
 
     return uloader, uloader_data
 
+  def testGetMemTotal(self):
+    ginstall.F['MEMINFO'] = 'testdata/proc/meminfo1'
+    total = ginstall.GetMemTotal()
+    self.assertTrue(total > 4*1e9)
+    ginstall.F['MEMINFO'] = 'testdata/proc/meminfo2'
+    total = ginstall.GetMemTotal()
+    self.assertTrue(total < 4*1e9)
+
+
 if __name__ == '__main__':
   unittest.main()
diff --git a/ginstall/testdata/proc/meminfo1 b/ginstall/testdata/proc/meminfo1
new file mode 100644
index 0000000..0a6b71a
--- /dev/null
+++ b/ginstall/testdata/proc/meminfo1
@@ -0,0 +1,40 @@
+MemTotal:        4144364 kB
+MemFree:         2207124 kB
+MemAvailable:    2654112 kB
+Buffers:          146000 kB
+Cached:           354176 kB
+SwapCached:            0 kB
+Active:           317572 kB
+Inactive:         438000 kB
+Active(anon):     255532 kB
+Inactive(anon):    35648 kB
+Active(file):      62040 kB
+Inactive(file):   402352 kB
+Unevictable:           0 kB
+Mlocked:               0 kB
+HighTotal:       3932160 kB
+HighFree:        2175912 kB
+LowTotal:         212204 kB
+LowFree:           31212 kB
+SwapTotal:             0 kB
+SwapFree:              0 kB
+Dirty:                 0 kB
+Writeback:             0 kB
+AnonPages:        255416 kB
+Mapped:            81892 kB
+Shmem:             35788 kB
+Slab:              20328 kB
+SReclaimable:      10616 kB
+SUnreclaim:         9712 kB
+KernelStack:        2792 kB
+PageTables:         7436 kB
+NFS_Unstable:          0 kB
+Bounce:                0 kB
+WritebackTmp:          0 kB
+CommitLimit:     2072180 kB
+Committed_AS:     891408 kB
+VmallocTotal:     761856 kB
+VmallocUsed:       41868 kB
+VmallocChunk:     703484 kB
+CmaTotal:        2965504 kB
+CmaFree:         1427640 kB
diff --git a/ginstall/testdata/proc/meminfo2 b/ginstall/testdata/proc/meminfo2
new file mode 100644
index 0000000..cc3fab8
--- /dev/null
+++ b/ginstall/testdata/proc/meminfo2
@@ -0,0 +1,40 @@
+MemTotal:        2144364 kB
+MemFree:         2207200 kB
+MemAvailable:    2654188 kB
+Buffers:          146000 kB
+Cached:           354176 kB
+SwapCached:            0 kB
+Active:           317580 kB
+Inactive:         438000 kB
+Active(anon):     255540 kB
+Inactive(anon):    35648 kB
+Active(file):      62040 kB
+Inactive(file):   402352 kB
+Unevictable:           0 kB
+Mlocked:               0 kB
+HighTotal:       3932160 kB
+HighFree:        2175912 kB
+LowTotal:         212204 kB
+LowFree:           31288 kB
+SwapTotal:             0 kB
+SwapFree:              0 kB
+Dirty:                 0 kB
+Writeback:             0 kB
+AnonPages:        255420 kB
+Mapped:            81892 kB
+Shmem:             35788 kB
+Slab:              20316 kB
+SReclaimable:      10616 kB
+SUnreclaim:         9700 kB
+KernelStack:        2792 kB
+PageTables:         7432 kB
+NFS_Unstable:          0 kB
+Bounce:                0 kB
+WritebackTmp:          0 kB
+CommitLimit:     2072180 kB
+Committed_AS:     891408 kB
+VmallocTotal:     761856 kB
+VmallocUsed:       41868 kB
+VmallocChunk:     703484 kB
+CmaTotal:        2965504 kB
+CmaFree:         1427540 kB