-------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Gnostic is Ada Generic Neural Object System Engineering. -- -- Gnostic (C) Copyright 2016 Manuel De Girardi. -- -------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Date := 2016-11-27 12:44:49 ;  -- Description : Ada Generic Neural Object System Engineering. -- -- Authors : Manuel De Girardi. -- -- Version := 2016.10.1a ;  -- Authors : Manuel De Girardi. -- -------------------------------------------------------------------------------------------------------------------------------------------------------------- with Gnat.Os_Lib; with Gnat.Directory_Operations; use Gnat; with Ada.Text_Io; use Ada; with Ada.Calendar; with Ada.Calendar.Formatting; use Ada.Calendar.Formatting; with Ada.Directories; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Ada.Characters.Handling; use Ada.Characters.Handling; with Ada.Strings.Fixed; use Ada.Strings; with Gnat.Strings; use Gnat.Strings; with Gnos.Tools; package body Gnos.Versions.Editting is procedure update (Filename : in String; Var_Name : in String; Value : in String) is Source : Text_Io.File_Type; Target : Text_Io.File_Type; Tmp_Filename : constant String := Filename & ".tmp"; Done : Boolean := False; begin Text_Io.Put_Line("Change value of " & Var_Name & " to " & Value & " in " & filename & " ; "); if Os_Lib.Is_Regular_File(Filename) then Text_Io.Create(Target, Text_Io.Out_File, Tmp_Filename); Text_Io.Open(Source, Text_Io.In_File, Filename); while not Text_Io.End_Of_File(Source) loop declare Line : constant String := Text_Io.Get_Line(Source); begin if not Done then if Fixed.Index(Line, Var_Name) /= 0 then Text_Io.Put_Line(Target, Line(Line'First..Fixed.Index(Line, "=")+1) & Value & " ; "); Done := True; else Text_Io.Put_Line(Target, Line); end if; else Text_Io.Put_Line(Target, Line); end if; end; end loop; Text_Io.Close(Target); Text_Io.delete(Source); directories.Rename(Tmp_Filename, Filename); end if; end Update; procedure Replace_Description (Project_Name : in String; Project_Prefix : in String; Var_Name : in String; Value : in String; Node : in String) is Filename : constant String := Project_Name & '/' & Project_Prefix & "-" & Node & "/src/lib/" & To_Lower(Project_Prefix) & '-' & To_Lower(Node) & ".ads"; Source : Text_Io.File_Type; Target : Text_Io.File_Type; Tmp_Filename : constant String := Filename & ".tmp"; Done : Boolean := False; begin Text_Io.Put_Line("Change value of " & Var_Name & " to " & Value & " in " & Node & " ; "); Text_Io.Put_Line("with filename : " & Filename); if Os_Lib.Is_Regular_File(Filename) then Text_Io.Create(Target, Text_Io.Out_File, Tmp_Filename); Text_Io.Open(Source, Text_Io.In_File, Filename); while not Text_Io.End_Of_File(Source) loop declare Line : constant String := Text_Io.Get_Line(Source); begin if not Done then if Fixed.Index(Line, Var_Name) /= 0 then Text_Io.Put_Line(Target, Line(Line'First..Fixed.Index(Line, "=")+1) & Value & " ; "); Done := True; else Text_Io.Put_Line(Target, Line); end if; else Text_Io.Put_Line(Target, Line); end if; end; end loop; Text_Io.Close(Target); Text_Io.delete(Source); directories.Rename(Tmp_Filename, Filename); end if; end Replace_Description; procedure Main_Description (Project_Name : in String; Project_Prefix : in String; Var_Name : in String; Value : in String; Node : in String) is Filename : constant String := Project_Name & '/' & Project_Prefix & Node & "/src/" & Project_Name & ".adb"; Source : Text_Io.File_Type; Target : Text_Io.File_Type; Tmp_Filename : constant String := Filename & ".tmp"; Done : Boolean := False; begin Text_Io.Put_Line("Change value of " & Var_Name & " to " & Value & " in " & Node & " ; "); Text_Io.Put_Line("with filename : " & Filename); if Os_Lib.Is_Regular_File(Filename) then Text_Io.Create(Target, Text_Io.Out_File, Tmp_Filename); Text_Io.Open(Source, Text_Io.In_File, Filename); while not Text_Io.End_Of_File(Source) loop declare Line : constant String := Text_Io.Get_Line(Source); begin if not Done then if Fixed.Index(Line, Var_Name) /= 0 then Text_Io.Put_Line(Target, Line(Line'First..Fixed.Index(Line, "=")+1) & Value & " ; "); Done := True; else Text_Io.Put_Line(Target, Line); end if; else Text_Io.Put_Line(Target, Line); end if; end; end loop; Text_Io.Close(Target); Text_Io.delete(Source); directories.Rename(Tmp_Filename, Filename); end if; end Main_Description; procedure To_Major(Project_Name : in String; Project_Prefix : in String) is begin Replace_Description (Project_Name, Project_Prefix, "Current_Major", Tools.Integer_Image(Version.Major_Version), "versions"); end To_Major; procedure To_Minor(Project_Name : in String; Project_Prefix : in String) is begin Replace_Description (Project_Name, Project_Prefix, "Current_Minor", Tools.Integer_Image(Version.Minor_Version), "versions"); end To_Minor; procedure To_Revision(Project_Name : in String; Project_Prefix : in String) is begin Replace_Description (Project_Name, Project_Prefix, "Current_Revision", Tools.Integer_Image(Version.Revision_Version), "versions"); end To_Revision; procedure To_Release(Project_Name : in String; Project_Prefix : in String) is begin Replace_Description (Project_Name, Project_Prefix, "Current_Release", Character'image(Version.Release_Version), "versions"); end To_Release; end Gnos.Versions.Editting;