Example #1
0
func (w *mergeWorker) mergeGzip(path string, size int64) error {
	rom, err := RomFromGZDepotFile(path)
	if err != nil {
		return err
	}

	sha1Hex := hex.EncodeToString(rom.Sha1)
	exists, _, err := w.pm.depot.RomInDepot(sha1Hex)
	if err != nil {
		return err
	}

	if exists {
		return nil
	}

	hh, rSize, err := HashesFromGZHeader(path, w.md5crcBuffer)
	if err != nil {
		return err
	}

	rom.Md5 = hh.Md5
	rom.Crc = hh.Crc

	rom.Size = rSize
	rom.Path = path

	if w.pm.onlyneeded {
		dats, err := w.depot.romDB.DatsForRom(rom)
		if err != nil {
			return err
		}

		if len(dats) == 0 {
			return nil
		}
	}

	err = w.depot.romDB.IndexRom(rom)
	if err != nil {
		return err
	}

	root, err := w.depot.reserveRoot(size)
	if err != nil {
		return err
	}

	outpath := pathFromSha1HexEncoding(w.depot.roots[root], sha1Hex, gzipSuffix)

	err = worker.Cp(path, outpath)
	if err != nil {
		return err
	}

	w.depot.adjustSize(root, size)
	return nil
}
Example #2
0
func (rs *RombaService) lookupRom(cmd *commander.Command, r *types.Rom, outpath string) error {
	err := rs.romDB.CompleteRom(r)
	if err != nil {
		return err
	}

	if r.Sha1 != nil {
		sha1Str := hex.EncodeToString(r.Sha1)

		inDepot, hh, rompath, size, err := rs.depot.SHA1InDepot(sha1Str)
		if err != nil {
			return err
		}

		if inDepot {
			fmt.Fprintf(cmd.Stdout, "-----------------\n")
			fmt.Fprintf(cmd.Stdout, "rom file %s in depot\n", rompath)
			fmt.Fprintf(cmd.Stdout, "crc = %s\n", hex.EncodeToString(hh.Crc))
			fmt.Fprintf(cmd.Stdout, "md5 = %s\n", hex.EncodeToString(hh.Md5))
			fmt.Fprintf(cmd.Stdout, "size = %d\n", size)
			r.Crc = hh.Crc
			r.Md5 = hh.Md5

			if outpath != "" {
				worker.Cp(rompath, filepath.Join(outpath, filepath.Base(rompath)))
			}
		}
	}

	dats, err := rs.romDB.DatsForRom(r)
	if err != nil {
		return err
	}

	if len(dats) > 0 {
		fmt.Fprintf(cmd.Stdout, "-----------------\n")
		fmt.Fprintf(cmd.Stdout, "rom found in:\n")
		for _, dat := range dats {
			dn := dat.NarrowToRom(r)
			if dn != nil {
				fmt.Fprintf(cmd.Stdout, "%s\n", types.PrintDat(dn))
			}
		}
	}
	return nil
}