| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- Option Compare Database
- Public Function vcsprompt()
- Dim prompt, prompttext, warning As String
-
- prompttext = "Write your command here:" & vbNewLine & _
- "> 'makesources' to create or update the source files" & vbNewLine & _
- "> 'update' to update the current application within the source files" & vbNewLine & _
- "> 'ok' to close this input box" & vbNewLine & _
- "(see docs for more commands)"
- prompt = ""
-
- While prompt <> "ok"
- prompt = InputBox(prompttext, "VCS", "")
-
- Select Case prompt
-
- Case "makesources"
-
- Call make_sources
-
- Case "update"
-
- Call update_from_sources
-
- Case "sync"
-
- Call sync
-
-
- Case vbNullString
- MsgBox "Operation cancelled"
- prompt = "ok"
-
- Case "ok"
-
- Case Else
- MsgBox "Unknown command"
-
- End Select
- whil:
- Wend
- Exit Function
- End Function
- Public Function make_sources()
- 'creates the source-code of the app
- Debug.Print "Zip the app file"
- Call zip_app_file
- Debug.Print "> done"
-
- Debug.Print get_include_tables
-
- Debug.Print "Run VCS Export"
- Call ExportAllSource
- Debug.Print "> done"
- MsgBox "Done"
- End Function
- Public Function update_from_sources()
- 'updates the application from the sources
- Debug.Print "Creates a backup of the app file"
- Call make_backup
- Debug.Print "> done"
-
- If MsgBox("WARNING: the current application is going to be updated " & _
- "with the source files. " & _
- "Any non committed work would be lost, " & _
- "are you sure you want to continue?" & _
- "", vbOKCancel) = vbCancel Then Exit Function
-
- Debug.Print "Run VCS Import"
- Call ImportAllSource
- Debug.Print "> done"
-
- MsgBox "Done"
-
- End Function
- Public Function config_git_repo()
- 'configure the application GIT repository for VCS use
-
- 'verify that it is a git repository
- If Not is_git_repo() Then
- MsgBox "Not a git repository, please use 'git init on this directory first"
- Exit Function
- End If
-
- ' complete the gitignore file
- Call complete_gitignore
- End Function
- Public Function sync()
- 'complete command to synchronize this app with the distant master branch
- 'verify that it is a git repository
- If Not is_git_repo() Then
- MsgBox "Not a git repository, please use 'git init on this directory first"
- Exit Function
- End If
- Call make_sources
- Call cmd("git add *" & "& pause", vbNormalFocus)
-
- Dim msg As String
- msg = InputBox("Commit message:", "VCS")
- If Not Len(msg) > 0 Then GoTo err_msg
-
- Call cmd("git commit -a -m " & Chr(34) & msg & Chr(34) & "& pause", vbNormalFocus)
-
- Call cmd("git pull origin master & pause", vbNormalFocus)
-
- Call update_from_sources
-
- Call cmd("push origin master" & "& pause", vbNormalFocus)
- Exit Function
- err_msg:
- MsgBox "Invalid value", vbExclamation
- End Function
- Public Function is_git_repo() As Boolean
- is_git_repo = (dir(CurrentProject.Path & "\.git\", vbDirectory) <> "")
- End Function
- Public Function get_include_tables()
- get_include_tables = vcs_param("include_tables")
- End Function
- Public Function vcs_param(ByVal key As String, Optional ByVal default_value As String = "") As String
- vcs_param = default_value
- On Error GoTo err_vcs_table
- vcs_param = DFirst("val", "ztbl_vcs", "[key]='" & key & "'")
- err_vcs_table:
- End Function
- Public Function zip_app_file() As Boolean
- On Error GoTo err
- Dim command As String
-
- zip_app_file = False
-
- 'run the shell comand
- Call cmd("cd " & CurrentProject.Path & " & " & _
- "zip tmp_" & CurrentProject.name & ".zip " & CurrentProject.name & _
- " & exit")
-
- 'remove the old zip file
- If dir(CurrentProject.Path & "\" & CurrentProject.name & ".zip") <> "" Then
- Kill CurrentProject.Path & "\" & CurrentProject.name & ".zip"
- End If
-
- 'rename the temporary zip
- Call cmd("cd " & CurrentProject.Path & " & " & _
- "ren tmp_" & CurrentProject.name & ".zip" & " " & CurrentProject.name & ".zip" & _
- " & exit")
-
-
- zip_app_file = True
- fin:
- Exit Function
- UnknownErr:
- MsgBox "Unknown error: unable to ZIP the app file, do it manually"
- GoTo fin
- err:
- MsgBox "Error while zipping file app: " & err.Description
- GoTo fin
- End Function
- Public Function make_backup() As Boolean
- On Error GoTo err
-
- make_backup = True
- If dir(CurrentProject.Path & "\" & CurrentProject.name & ".old") <> "" Then
- Kill CurrentProject.Path & "\" & CurrentProject.name & ".old"
- End If
-
- FileCopy CurrentProject.Path & "\" & CurrentProject.name, CurrentProject.Path & "\" & CurrentProject.name & ".old"
-
- make_backup = True
- Exit Function
- err:
- MsgBox "Error during backup:" & err.Description
- End Function
- Public Function complete_gitignore()
- ' creates or complete the .gitignore file of the repo
- Dim gitignore_path, str_existing_keys, str As String
- Dim keys() As String
- keys = Split("*.accdb;*.laccdb;*.mdb;*.ldb;*.accde;*.mde;*.accda", ";")
- gitignore_path = CurrentProject.Path & "\.gitignore"
- Dim fso As Object
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- Dim oFile As Object
- If Not fso.FileExists(gitignore_path) Then
- Set oFile = fso.CreateTextFile(gitignore_path)
- Else
- Set oFile = fso.OpenTextFile(gitignore_path, ForReading)
- str_existing_keys = ""
-
- While Not oFile.AtEndOfStream
- str = oFile.readline
- If Len(str_existing_keys) = 0 Then
- str_existing_keys = str
- Else
- str_existing_keys = str_existing_keys & ";" & str
- End If
- Wend
- oFile.Close
-
- Dim existing_keys() As String
- existing_keys = Split(str_existing_keys, ";")
-
- Set oFile = fso.OpenTextFile(gitignore_path, ForAppending)
- End If
-
- oFile.WriteBlankLines (2)
- oFile.WriteLine ("#[ automatically added by VCS")
- For Each key In keys
- If Not IsInArray(key, existing_keys) Then
- oFile.WriteLine key
- End If
- Next key
- oFile.WriteLine "#]"
- oFile.WriteBlankLines (2)
-
- oFile.Close
- Set fso = Nothing
- Set oFile = Nothing
- End Function
- Private Function IsInArray(ByVal stringToBeFound As String, ByRef arr As Variant) As Boolean
- IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
- End Function
|