Skip to content

Commit 1ccf309

Browse files
Merge pull request #285 from wttech/oak-compact
OAK Compact command
2 parents 70f19bd + fe2c8d1 commit 1ccf309

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

cmd/aem/oak.go

+31
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ func (c *CLI) oakCmd() *cobra.Command {
1414
Short: "Manages OAK repository",
1515
}
1616
cmd.AddCommand(c.oakIndexCmd())
17+
cmd.AddCommand(c.oakCompactCmd())
1718
return cmd
1819
}
1920

@@ -195,3 +196,33 @@ func oakIndexByFlags(cmd *cobra.Command, i pkg.Instance) (*pkg.OAKIndex, error)
195196
}
196197
return nil, fmt.Errorf("flag 'name' is required")
197198
}
199+
200+
func (c *CLI) oakCompactCmd() *cobra.Command {
201+
cmd := &cobra.Command{
202+
Use: "compact",
203+
Short: "Compact OAK store",
204+
Run: func(cmd *cobra.Command, args []string) {
205+
instances, err := c.aem.InstanceManager().Some()
206+
if err != nil {
207+
c.Error(err)
208+
return
209+
}
210+
compacted, err := pkg.InstanceProcess(c.aem, instances, func(instance pkg.Instance) (map[string]any, error) {
211+
if err := instance.OAK().Compact(); err != nil {
212+
return nil, err
213+
}
214+
return map[string]any{
215+
OutputChanged: true,
216+
"instance": instance,
217+
}, nil
218+
})
219+
if err != nil {
220+
c.Error(err)
221+
return
222+
}
223+
c.SetOutput("compacted", compacted)
224+
c.Changed("store compacted")
225+
},
226+
}
227+
return cmd
228+
}

pkg/oak.go

+8
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ func NewOAK(instance *Instance) *OAK {
1818
func (o *OAK) IndexManager() *OAKIndexManager {
1919
return o.indexManager
2020
}
21+
22+
func (o *OAK) oakRun() *OakRun {
23+
return o.instance.manager.aem.vendorManager.oakRun
24+
}
25+
26+
func (o *OAK) Compact() error {
27+
return o.instance.manager.aem.vendorManager.oakRun.Compact(o.instance.local.Dir())
28+
}

pkg/oak_run.go

+22-1
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,12 @@ func (or OakRun) SetPassword(instanceDir string, user string, password string) e
9797
return nil
9898
}
9999

100+
func (or OakRun) StoreDir(instanceDir string) string {
101+
return fmt.Sprintf("%s/%s", instanceDir, or.StorePath)
102+
}
103+
100104
func (or OakRun) RunScript(instanceDir string, scriptFile string) error {
101-
storeDir := fmt.Sprintf("%s/%s", instanceDir, or.StorePath)
105+
storeDir := or.StoreDir(instanceDir)
102106
cmd, err := or.vendorManager.javaManager.Command(
103107
"-Djava.io.tmpdir="+pathx.Canonical(or.vendorManager.aem.baseOpts.TmpDir),
104108
"-jar", or.JarFile(),
@@ -114,3 +118,20 @@ func (or OakRun) RunScript(instanceDir string, scriptFile string) error {
114118
}
115119
return nil
116120
}
121+
122+
func (or OakRun) Compact(instanceDir string) error {
123+
storeDir := or.StoreDir(instanceDir)
124+
cmd, err := or.vendorManager.javaManager.Command(
125+
"-Djava.io.tmpdir="+pathx.Canonical(or.vendorManager.aem.baseOpts.TmpDir),
126+
"-jar", or.JarFile(),
127+
"compact", storeDir,
128+
)
129+
if err != nil {
130+
return err
131+
}
132+
or.vendorManager.aem.CommandOutput(cmd)
133+
if err := cmd.Run(); err != nil {
134+
return fmt.Errorf("cannot run Oak Run compact command for instance dir '%s': %w", instanceDir, err)
135+
}
136+
return nil
137+
}

0 commit comments

Comments
 (0)